繁体   English   中英

如何反编译pdb得到C#源代码?

[英]How to decompile pdb to get C# source code?

我的场景:我想在日志文件中写入发生异常的部分代码(例如,发生异常的前 5 行和后 5 行 - 或者至少是该方法的所有代码)。

我的想法是在 C# 代码中反编译 pdb 文件,并从该反编译文件中找到一个在 catch 块中出现异常的方法。

Pbd 文件存在,我的应用程序构建为调试版本。 我知道有一些工具允许通过其 GUI(例如 Reflector)进行反编译,但我想从我的代码中获得该功能。

怎么做?

PDB 包含 MSIL 和源文件名/行号之间的映射。 当您可以返回 go 并查看原始源文件时,这是最有用的,因为反编译通常不会保留行号(尽管如果它也使用 PDB 文件则可以)。 它当然不会完全按照所写的方式恢复原始代码,尽管使用符号名称(也存储在 PDB 中)它通常很接近。

查看 ILSpy 的源代码。 它是 Reflector 的开源替代品。

特别是它使用库Mono.CecilMono.Cecil.Pdb 我怀疑后者可以帮助您完成您想做的事情。

相关代码部分使用 MIT 许可证,这是一个许可许可证。

使用反射获取执行方法的源码: System.Reflection.MethodBase.GetCurrentMethod().GetMethodBody();

您可以使用 MethodBase 成员获得各种信息: http://msdn.microsoft.com/en-us/library/system.reflection.methodbase_methods.aspx

还可以在这里查看一些在异常处理时获取 MethodBase 信息的好例子: http://msdn.microsoft.com/en-us/library/system.reflection.methodbase.getmethodbody.aspx#Y563

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM