Chr*_*rry 33 .net c# exception stack-trace
MSDN说这个关于该类的StackTrace属性Exception:
StackTrace属性包含堆栈跟踪,您可以使用它来确定错误发生在代码中的哪个位置.StackTrace列出了异常之前的所有被调用方法以及进行调用的源中的行号.
所以我知道这些信息是可用的.如何获得实际显示在堆栈跟踪中的行号?我的代码在一个非常困难和复杂的代码中抛出一个异常,它通过TONS的对象,所以我不想经过几十年的时间来查看异常发生的位置.异常的堆栈跟踪仅显示方法签名而不显示行号.
adr*_*nks 42
要获取StackTrace中的行号,您需要在dll/exes旁边拥有正确的调试信息(PDB文件).要生成调试信息,请在Project Properties -> Build -> Advanced -> Debug Info以下位置设置选项:

将其设置为full足够(有关其他选项的作用,请参阅高级构建设置对话框文档).默认情况下会为Debug构建配置生成调试信息(即PDB文件),但也可以为Release构建配置生成调试信息(即PDB文件).
为发布版本生成PDB使您可以在没有PDB的情况下发送代码,但是如果需要行号(或者甚至连接远程调试器),则将PDB放在dll旁边.需要注意的一点是,在发布版本中,由于编译器或JIT编译器的优化,行号可能不完全正确(如果行号显示为0,则尤其如此).
您必须在启用pdb文件的情况下构建项目,并确保使用您的应用程序部署pdb文件.您可以通过右键单击需要pdb文件的程序集来检查pdb文件是否实际上是为您配置的,然后转到Properties> Build> Advanced并确保在Output Debug Info下设置为full.
如果您使用VS2012或更高版本的Web应用程序或Web服务项目,则更改构建设置将不起作用.相反,您应该遵循本文中的建议:
Visual Studio 2012网站发布不复制.pdb文件
具体来说,您应该在中包含以下设置
<YOUR_PROJECT>\Properties\PublishProfiles\*.pubxml
Run Code Online (Sandbox Code Playgroud)
您项目的文件:
<PropertyGroup>
<ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
鉴于程序集有一个pdb文件,您可以尝试以下操作:
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();
}
Run Code Online (Sandbox Code Playgroud)