【问题标题】:How does ASP.NET get line numbers in it's generic error handlerASP.NET 如何在它的通用错误处理程序中获取行号
【发布时间】:2013-01-29 15:14:29
【问题描述】:

每个人都熟悉 ASP.NET 的默认错误处理程序。黄色框包含 Source Error(发生错误的 5 行代码)和 Source File(文件名和行号),如下所示:

Source Error:

Line 48:         public ActionResult TriggerException()
Line 49:         {
Line 50:            throw new SystemException("This is a generated exception to test the global error handler.");
Line 51:         }
Line 52:         


Source File: c:\MyApp\Controllers\TestToolsController.cs    Line: 50 

我正在构建一个自定义错误处理程序并希望获得这些相同的信息,但它们不包含在异常对象中。有谁知道我如何找回这些物品。

【问题讨论】:

    标签: asp.net exception-handling


    【解决方案1】:

    行号在 Exception 本身中不可用,但在 StackTrace 中可用,如下所示:

    try
    {
        // code that throws an Exception here
    }
    catch (Exception exc)
    {
        var frame = new StackTrace(exc, true).GetFrame(0); // where the error originated
        var lineNumber = frame.GetFileLineNumber();
        // Handle line numbers etc. here
    }
    

    【讨论】:

    • 伟大的开始。这给了我文件名和行号。我怎样才能得到这 5 行代码?
    • 你没有得到代码。通过获得文件和行号,您或其他开发人员可以查找问题。原始源代码本身永远不会被嵌入到 EXE/DLL 中。
    • 那么,当 ASP.NET 只部署了我的已编译应用程序时,它如何在我的生产服务器上的错误屏幕中显示 5 行?
    • 你确定是这样吗?在生产系统上显示源代码的任何错误消息都是一个巨大的安全问题。看起来源代码实际上在生产系统上,无论是作为代码文件还是嵌入到 PDB 文件(符号文件,您通常会在生产系统上忽略它。您是否使用 PDB 文件部署 DEBUG 构建?跨度>
    • 你是对的,生产服务器没有显示代码行。我的错。我以前从未注意到有什么不同。谢谢。
    猜你喜欢
    • 2015-05-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多