在“释放”模式下的“堆栈跟踪”中显示.NET程序集的行号

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

更新:

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

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

工作解决scheme

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

  • 进入您要查看堆栈跟踪行号的项目的“属性”窗口。
  • 点击构build“垂直选项卡”。
  • select“释放”configuration。 检查DEBUG常量参数。
  • 取消选中“优化代码”参数,以避免内联代码偶然的跟踪问题(这一步不是必需的)。
  • 按Advanced …button并selectOutput – > Debug Info – > pdb-only。
  • 使用程序集部署生成的.pdb文件。

执行下面的注释:

  • 还有一个要检查的事情是在“打包/发布网站”部分,“排除生成的debugging符号”checkbox也是未选中的

在VS2012中,您还需要在属性的Package / Publish Web部分中取消选中“排除生成的debugging符号”。

我的解决scheme

将pdb文件复制到与可执行文件相同的文件夹中。

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

这是理由

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

过去,我遇到了一些问题,我觉得需要使用发布版本来部署PDB文件,以便跟踪错误。 原因就像你说的那样,是一个非常大的方法发生的例外,我不能准确地确定它发生的地方。

这可能表明该方法需要重构为更小,更细化的方法。 不是所有的答案,但是这个方法在短期内(我经常在重构过程中发现错误)和长期的效果很好。

只是一个想法。

在构build/部署包中包含debugging符号。

在VS 2008 Express中,我在项目属性 – >编译 – >高级编译选项下find它。

try { // your method } catch (Exception ex) { // log-> ex.ToString(); // it will give you whole exception including line number and
// file name }
try { // your method } catch (Exception ex) { // log-> ex.ToString(); // it will give you whole exception including line number and
// file name }
另外,在部署中包含.pdb文件(从bin文件夹)来获得整个exception,否则只会显示出现exception的方法名称。

这每次都有效。 您只需要对堆栈跟踪消息进行子串处理。 真正简单! 另外,在vb.net你需要做“显示所有文件”,并包括pdb。

 'Err is the exception passed to this function Dim lineGrab As String = err.StackTrace.Substring(err.StackTrace.Length - 5) Dim i As Integer = 0 While i < lineGrab.Length If (IsNumeric(lineGrab(i))) Then lineNo.Append(lineGrab(i)) End If i += 1 End While 'LineNo holds the number as a string 

C#版本:

 string lineGrab = error.StackTrace.Substring(error.StackTrace.Length - 5); int i = 0; int value; while (i < lineGrab.Length) { if (int.TryParse(lineGrab[i].ToString(), out value)) { strLineNo.Append(lineGrab[i]); } i++; }