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

时间:2009-08-25 14:55:31

标签: c# .net debugging deployment pdb-files

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

4 个答案:

答案 0 :(得分:34)

除非捆绑PDB,否则无法直接从应用程序获取带行号的堆栈跟踪。 然而,如果你有相同版本的应用程序的PDB文件发送给客户,并且你不介意一些轻量级脚本,那么你可以转.NET堆栈跟踪和IL偏移回行号。

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

答案 1 :(得分:8)

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

答案 2 :(得分:1)

不是你问题的恰当答案,但我有一个建议。您可以合并一个日志记录机制,并将这些日志文件与堆栈跟踪一起使用。如果在日志消息中包含行号,则可以手动将日志记录信息与堆栈跟踪相结合。

如果您不想占用太多空间,可以使用有限大小的日志文件,这样只会保留最新的日志消息。

我们使用log4net库来满足我们的日志需求,我建议你看一下。

答案 3 :(得分:0)

不,没有。将IL行映射到原始源文件和行号所需的所有信息都存储在PDB中。没有PDB,就无法在堆栈跟踪中获取该信息。