如何在没有pdb的情况下在堆栈跟踪中包含行号?

Joe*_*Fan 31 .net c# deployment debugging pdb-files

我们目前正在分发一个没有.pdb文件的WinForms应用程序,以节省客户端计算机上的空间和下载带宽.当我们得到堆栈跟踪时,我们得到方法名称但不是行号.有没有办法获取行号而不诉诸分发.pdb文件?

Ben*_*ack 35

除非捆绑PDB,否则无法直接从应用程序获取带有行号的堆栈跟踪. 但是,如果您将相同版本的应用程序的PDB文件发送给客户,并且您不介意轻量级脚本,则可以将.NET堆栈跟踪和IL偏移量转换为行号.

在构建过程中,使用Mike Stall的pdb2xml转换器,作为其出色的MDbg托管代码调试器的一部分进行分发,并将它们存储在一些安全的地方(例如,源代码控制).从客户端获取堆栈跟踪时,可以从XML数据中查询IL偏移量以确定相关的行号.如果您的堆栈跟踪被提交到网站,您甚至可以自动执行转换,这样开发人员就可以在案例到达收件箱时获得完整详细的堆栈跟踪.


Ree*_*sey 8

不行.行号是调试信息的一部分,它只存储在PDB文件中.这就是PDB文件首先存在的原因.

  • 您不必将PDB文件发送到*具有*PDB文件.只要你在构建时将它存放在某个地方,就可以在获得堆栈跟踪时引用它.请参见http://stackoverflow.com/questions/1328836/include-line-numbers-in-stack-trace-without-pdb/1328915#1328915 (2认同)