C#例外不给行号

时间:2010-02-03 12:54:33

标签: c#

我正在使用来自Java背景的C# - 我有一个例外,但它没有告诉我行号 - 只是方法名称。

这是通常的吗?是调试/发布版本吗?

6 个答案:

答案 0 :(得分:41)

只要将pdb文件保留在应用程序目录中,就可以在Debug中编译时使用行号。

如果按照Justin's answer启用PDB创建,这也适用于Release。

如果您有兴趣,可以在PDB Files(MSDN)

找到更多信息

答案 1 :(得分:21)

这是调试符号不可用 - 在构建项目时,请确保在调试设置中设置了“完整”(Project properties - > Build - > {{ 1}} - > Advanced)并确保在您运行应用时,生成的pdb文件可以放在同一目录中。

答案 2 :(得分:14)

StackTrace类的Exception属性包含行号,至少在调试信息(pdb文件)可用时是这样:

using System;
class Program {
    public static void Main() {
        try {
            throw new Exception("test");
        } catch (Exception e) {
            Console.WriteLine(e.StackTrace);
        }
    }
}

将使用pdb文件提供以下输出:

at Program.Main() in X:\code\test\test\Program.cs:line 6

并且没有:

at Program.Main()

答案 3 :(得分:4)

确保使用该应用程序部署应用程序的PDB文件。 PDB文件是CLR用于确定源代码行号的文件。

答案 4 :(得分:0)

我的应用是ClickOnce应用(WPF),我必须做一些不同的事情:

项目属性设计器>发布>申请文件

选中显示所有文件复选框

找到pdb文件并在其中设置下拉列表以包含它

我只有Pdb设置为:    构建>高级>调试信息

不确定是否重要。

答案 5 :(得分:0)

对于 .NET Core、.NET 5 及更高版本,要在发布版本中具有完整的异常行号,请按如下方式配置项目:

<PropertyGroup>    
  <DebugSymbols>true</DebugSymbols>
  <DebugType>embedded</DebugType>

    <!-- Only enable the following if the line numbers mismatch -->
    <!--<Optimize>false</Optimize>-->
    
    <!--
      Additional properties which may impact how printed line numbers match the source code line numbers are listed here:
      https://docs.microsoft.com/en-us/dotnet/core/run-time-config/compilation
    -->
</PropertyGroup>

上述配置将直接在构建文件中包含调试符号,可以将其发布为 nuget。

上述替代方法是将调试包与主要 nuget 包一起恢复,目前尚不支持:https://github.com/NuGet/Home/issues/9667