我正在尝试调试客户端向我们报告的错误。堆栈跟踪只有字节偏移量,而不是行数。在.NET程序集中查找字节偏移量
例如
[NullReferenceException异常:对象引用不设置为一个对象的一个实例]
Foo.Bar(FooFoo P)32
Foo.BarBar()191
Foo.BarBarBar()15
如何反向工程这些字节偏移到代码/方法调用等行?
我如何才能找到其中的NullReferenceException被抛出?
我正在尝试调试客户端向我们报告的错误。堆栈跟踪只有字节偏移量,而不是行数。在.NET程序集中查找字节偏移量
例如
[NullReferenceException异常:对象引用不设置为一个对象的一个实例]
Foo.Bar(FooFoo P)32
Foo.BarBar()191
Foo.BarBarBar()15
如何反向工程这些字节偏移到代码/方法调用等行?
我如何才能找到其中的NullReferenceException被抛出?
这是可能的工作(或者可以不:))的解决方案。的问题是,偏移量和行号之间的映射被包含在PDB(又名调试符号)
ildasm
,要么将它添加到PATH
或其他地方复制。ildasm /LINENUM /SOURCE YourFile.exe
。它将输出具有偏移和源线映射的IL。唯一的问题,我看到你不能生产刚好相同的二进制文件和映射可能会波动。
我记得把我的头顶部的唯一工具将是.NET Reflector。打开与您客户端的二进制文件完全相同的二进制文件,并将“选项”对话框中的语言更改为IL,并且它应该显示(AFAIK)与每行上的标签相同的字节偏移量。
你必须阅读IL,而不是C#或任何东西,虽然,但它总比没有好。
编辑:Andreys的解决方案是在未来可运送寿:)
可能会更好应用程序调试符号,这将产生线,而不是在堆栈跟踪偏移 – Andrey 2011-02-03 12:36:33
如果您启用优化编译不太容易 – 2011-02-03 12:39:59
+1,没有理由调试symbolos不编译即使不运行生活,这你可以将它们发送到客户端 – TomTom 2011-02-03 12:40:24