当前位置:  开发笔记 > 编程语言 > 正文

在发布模式下显示Stack Trace for .NET程序集中的行号

如何解决《在发布模式下显示StackTracefor.NET程序集中的行号》经验,为你挑选了4个好方法。

有没有办法在发布模式下显示.NET程序集构建/部署的堆栈跟踪中的行?

更新:

我的应用程序分为三个类库项目和一个ASP.NET"网站"项目.我试图追踪的错误是在三个类库项目之一.我只为生成"未设置为对象实例的对象引用"错误的类库项目部署了pdb文件.

行号仍未显示在堆栈跟踪中.我是否需要为所有项目部署pdb文件以获取堆栈跟踪中的行号?

工作方案

为每个应用程序部署pdb文件修复了行号问题.



1> Coxy..:

进入要查看堆栈跟踪行号的项目的"属性"窗口.

单击Build"垂直选项卡".

选择"发布"配置.检查DEBUG常量参数.

取消选中"优化代码"参数以避免内联代码偶尔出现跟踪问题(此步骤不是必需的).

按Advanced ...按钮并选择Output - > Debug Info - > pdb-only.

使用程序集部署生成的.pdb文件.

通过以下评论实施:

要检查的另一件事是在"打包/发布Web"部分中,"排除生成的调试符号"复选框也未选中


要检查的另一件事是在"打包/发布Web"部分中,"排除生成的调试符号"复选框也未选中
是.这就是调试符号和行号所在的位置.
@Carlo:调试信息也适用于发布(优化)代码,但调试有限(http://stackoverflow.com/questions/113866).然而,即使在优化代码中,callstack也是非常可靠的,除了内联函数和可能缺少尾调用的情况,因为调用xxx/ret序列被替换为jmp xxx.
如果您不需要,您可能不希望公开此信息.使用它来调试客户端问题,是的.但是您并不总是希望这样做,因为调试信息可以泄露敏感数据并成为攻击媒介.取决于您的应用程序.
我是否必须将pdb文件与程序集一起部署?

2> 小智..:

在VS2012中,您还需要取消选中属性的"包/发布Web"部分中的"排除生成的调试符号".



3> 小智..:

我的解决方案

将pdb文件复制到可执行文件所在的文件夹中.

现在我可以在运行exe文件时查看行号.

这是理由

http://msdn.microsoft.com/en-us/library/ee416588%28v=vs.85%29.aspx



4> slolife..:

我在过去遇到过问题,我觉得需要部署带有发布版本的PDB文件以便追踪错误.原因是,就像你说的那样,异常发生在一个非常大的方法中,我无法准确地确定它发生的位置.

这可能表明该方法需要重构为更小,更精细的方法.不是一个适合所有答案的,但这种方法在短期内(我经常在重构期间发现错误)和长期运行对我有利.

只是一个想法.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有