将行号添加到以发布模式部署的ASP.NET网站的堆栈跟踪

Nee*_*pta 7 .net c# asp.net exception pdb-files

我正在维护一个Web应用程序,这个网站也有错误日志功能.

我的客户偶尔在网站上遇到一些问题,该问题也记录在错误日志文件中,但它只显示方法调用层次结构,其中堆栈跟踪中发生异常.

当我在Dev环境堆栈中显式引发异常时,异常的跟踪显示方法调用层次结构及其实际异常发生的行号.

我知道在生产中我们只部署DLL,这就是为什么我们没有在日志文件中获取错误行号.

任何人都有任何想法如何只在我们部署DLL(程序集)时才能获得错误行号?

And*_*bel 15

在构建设置中,将项目设置为在发布模式下生成调试符号(pdb:s).如果生成它们,它们将自动包含在部署中.无需在调试模式下运行整个站点,只需要可用的调试符号即可.

该设置位于项目的属性中.选择发布时使用的构建配置.然后在Build选项卡上,按下Advanced...按钮并将调试信息设置为"Full".

  • 我在Release配置中将"Debug Info"设置为full,然后发布它.但我的堆栈仍然没有行号.在本地,它显示像System.Data.Entity堆栈之类的东西,直到最后的异常,在生产中,堆栈停止在我的调用方法上.你能帮助我吗? (2认同)

Lui*_*ipe 5

Anders Abel之前的回答非常适合您的需求.不过我想添加一个更多架构驱动的方法,即重构你的日志引擎以使用C#5.0中新的Caller Information属性.

例如,您可以使用此方法记录异常

public static void NDLogException(Exception ex,
               [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
               [System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
               [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
Run Code Online (Sandbox Code Playgroud)

编译器将使用相应的值推断并填充默认参数.CallerLineNumber属性是您专门寻找的属性.

当然,这需要您更改代码(假设您可以使用)

有关调用者信息属性的更多信息,请阅读此处