146

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

更新:

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

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

工作解决方案

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

4

8 回答 8

154
  • 进入要查看堆栈跟踪行号的项目的“属性”窗口。
  • 单击构建“垂直选项卡”。
  • 选择“发布”配置。检查 DEBUG 常量参数。
  • 取消选中“优化代码”参数以避免内联代码偶尔出现跟踪问题(此步骤不是必需的)。
  • 按 Advanced... 按钮并选择 Output -> Debug Info -> pdb-only。
  • 使用程序集部署生成的 .pdb 文件。

使用以下评论实现:

  • 要检查的另一件事是在“打包/发布 Web”部分中,“排除生成的调试符号”复选框也未选中
于 2009-03-10T01:01:56.217 回答
17

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

于 2014-01-29T20:50:20.193 回答
16

我的解决方案

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

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

这是原因

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

于 2009-09-03T20:10:54.983 回答
10

过去我遇到过一些问题,我觉得需要使用发布版本部署 PDB 文件以跟踪错误。原因是,就像你说的,异常发生在一个非常大的方法中,我无法准确地确定它发生在哪里。

这可能表明该方法需要重构为更小、更细粒度的方法。不是一刀切的答案,但这种方法在短期内(我经常在重构过程中发现错误)和从长远来看对我很有帮助。

只是一个想法。

于 2009-09-03T20:27:20.840 回答
4

在构建/部署包中包含调试符号。

于 2009-03-10T00:47:07.873 回答
0

在 VS 2008 Express 中,我在 Project Properties --> Compile --> Advanced Compile Options 下找到了它。

于 2009-05-21T14:54:54.483 回答
0

在 .NET Core 中,您需要关闭发布模式的“优化代码”选项以显示正确的行号。

控制代码生成的 C# 编译器选项

于 2022-02-08T04:21:27.177 回答
-7

这每次都有效。您只需要对堆栈跟踪消息进行子串化。真正的容易!此外,在 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++;
}
于 2016-03-07T15:32:59.660 回答