【发布时间】:2010-11-22 15:57:51
【问题描述】:
我们目前正在分发一个没有 .pdb 文件的 WinForms 应用程序,以节省客户端计算机上的空间和下载带宽。当我们得到堆栈跟踪时,我们得到的是方法名,而不是行号。有什么方法可以在不分发 .pdb 文件的情况下获取行号?
【问题讨论】:
标签: c# .net debugging deployment pdb-files
我们目前正在分发一个没有 .pdb 文件的 WinForms 应用程序,以节省客户端计算机上的空间和下载带宽。当我们得到堆栈跟踪时,我们得到的是方法名,而不是行号。有什么方法可以在不分发 .pdb 文件的情况下获取行号?
【问题讨论】:
标签: c# .net debugging deployment pdb-files
除非您捆绑了 PDB,否则您无法直接从应用程序中获取带有行号的堆栈跟踪。 然而,如果您拥有与您交付给客户的应用程序版本相同的 PDB 文件,并且您不介意一些简单的脚本,那么您可以转向.NET 堆栈跟踪和 IL 偏移回到行号。
在您的构建过程中,使用Mike Stall's pdb2xml converter,作为他出色的MDbg managed code debugger 的一部分分发,并将它们存储在安全的地方(例如,源代码控制)。当您从客户端获得堆栈跟踪时,您可以从 XML 数据中查询 IL 偏移量以确定相关的行号。如果您的堆栈跟踪被提交到网站,您甚至可以自动进行转换,以便开发人员在案例进入收件箱时已经获得完整详细的堆栈跟踪。
【讨论】:
不是您问题的适当答案,但我有一个建议。您可以合并一个日志记录机制,并在堆栈跟踪旁边获取这些日志文件。如果您在日志消息中包含行号,则可以手动将日志记录信息与堆栈跟踪结合起来。
如果您不想占用太多空间,可以使用大小有限的日志文件,这样只会保留最新的日志消息。
我们使用 log4net 库来满足我们的日志记录需求,我建议你看看。
【讨论】:
不,没有。将 IL 行映射到原始源文件和行号所需的所有信息都存储在 PDB 中。如果没有 PDB,就无法在堆栈跟踪中获取该信息。
【讨论】:
没有。行号是调试信息的一部分,仅存储在 PDB 文件中。这就是 PDB 文件首先存在的原因。
【讨论】: