我之前使用Java,现在转用C#。我遇到了一个异常,但是它没有告诉我出错的行数,只有方法名。
这种情况常见吗?是由于Debug / Release版本导致的吗?
我之前使用Java,现在转用C#。我遇到了一个异常,但是它没有告诉我出错的行数,只有方法名。
这种情况常见吗?是由于Debug / Release版本导致的吗?
pdb
文件,调试时编译时就可以使用行号。这是由于调试符号不可用 - 当您构建项目时,请确保在调试设置中使用“full”设置 (项目属性
-> 生成
-> 高级
-> 调试信息
),同时确保在运行应用程序时,pdb文件与程序集位于同一目录中。
Exception
类的 StackTrace
属性包含行号: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()
确保应用程序的PDB文件与应用程序一起部署。PDB文件是CLR用于确定源代码行号的文件。
对于 .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://learn.microsoft.com/en-us/dotnet/core/run-time-config/compilation
-->
</PropertyGroup>
我的应用程序是一个ClickOnce应用程序(WPF),我必须做一些不同的事情:
项目属性设计器 > 发布 > 应用程序文件
勾选“显示所有文件”复选框
找到pdb文件并设置其下拉菜单以包含它
我将Pdb-only设置为: 构建 > 高级 > 调试信息
不确定这是否重要。