我正在使用来自Java背景的C# - 我有一个例外,但它没有告诉我行号 - 只是方法名称。
这是通常的吗?是调试/发布版本吗?
答案 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