Exception
类的StackTrace
属性是什么?MSDN对此进行了解释:
StackTrace
属性保存着一段堆栈跟踪信息,可以用来确定错误发生在代码中的哪个位置。堆栈跟踪会列出所有在异常之前被调用的方法以及这些调用在源代码中的行号。
因此我知道该信息是可用的。那么如何让行号实际显示在堆栈跟踪中呢?我的代码在一个非常复杂的、经过大量对象处理的部分中抛出了异常,所以我不想逐步执行很多次来查看异常发生的位置。异常的堆栈跟踪只显示了方法签名而没有行号。
Exception
类的StackTrace
属性是什么?MSDN对此进行了解释:
StackTrace
属性保存着一段堆栈跟踪信息,可以用来确定错误发生在代码中的哪个位置。堆栈跟踪会列出所有在异常之前被调用的方法以及这些调用在源代码中的行号。
因此我知道该信息是可用的。那么如何让行号实际显示在堆栈跟踪中呢?我的代码在一个非常复杂的、经过大量对象处理的部分中抛出了异常,所以我不想逐步执行很多次来查看异常发生的位置。异常的堆栈跟踪只显示了方法签名而没有行号。
项目属性->生成->高级->调试信息
选项中设置:
将其设置为full
应该就足够了(有关其他选项的详细信息,请参见高级生成设置对话框文档)。默认情况下,Debug构建配置会生成调试信息(即PDB文件),但也可以为Release构建配置生成调试信息。
为发布版本生成PDB文件使您能够在不包含PDB文件的情况下分发代码,但如果您需要行号(甚至附加远程调试器),则可以将PDB文件放在dll旁边。请注意,在发布版本中,由于编译器或JIT编译器所做的优化,行号可能不完全正确(特别是如果行号显示为0)。
<PropertyGroup><DebugType>Full</DebugType></PropertyGroup>
来实现与上述方法相同的效果。我的日志现在显示行号而不是0。 - Chris Altig.dll
输出)进行操作,而不仅仅是顶层项目(通常为 .exe
)。 - Brains<YOUR_PROJECT>\Properties\PublishProfiles\*.pubxml
您项目的文件:
<PropertyGroup>
<ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>
</PropertyGroup>
try
{
throw new Exception();
}
catch (Exception ex)
{
// Get line number from the stack trace's top frame for the exception with source file information
int linenumber = (new StackTrace(ex, true)).GetFrame(0).GetFileLineNumber();
}
您需要启用pdb文件构建项目,并确保将pdb文件与应用程序一起部署。您可以通过右键单击需要pdb文件的程序集,然后转到“属性”>“生成”>“高级”来检查是否为您的配置构建了pdb文件,并确保在“输出调试信息”下设置为full。