簡體   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