Wie zu dekompilieren pdb um C# - Quellcode?
Mein Szenario:
Ich möchte schreiben in eine log-Datei Teil des Codes, wo die exception passiert ist (zum Beispiel 5 Zeilen vor und 5 Zeilen nach der Zeile wo die exception passiert ist - oder zumindest den code der Methode).
Meine Idee ist es, zu dekompilieren pdb-Datei in C# - code aus, dass der dekompilierte Datei eine Methode finden, das ging in der Ausnahme im catch-block.
Pbd-Datei vorhanden ist und meine app zu bauen, wie Sie die debug-version. Ich weiß, dass es tools gibt, die ermöglicht es durch seine grafische Benutzeroberfläche (z.B. Reflektor) zu tun, dekompilieren, aber ich möchte, dass die Funktion aus meinem code.
Wie es zu tun?
- Die CLR setzt bereits die .pdb-Datei. Das ist das, was produziert der source code und die Zeilennummer Anmerkungen in der Ausnahme StackTrace. Vergleichen Sie den stack-trace, die Sie bekommen, ohne die .pdb-Datei in Ort zu sehen, gibt es Unterschied. Es gibt keinen Punkt in der Suche nach mehr, das ist, was möglich ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der PDB enthält die Zuordnung zwischen den MSIL-und Quell-Dateinamen /Zeilennummer. Dies ist besonders nützlich, wenn Sie können gehen Sie zurück und betrachten Sie die original-Quelldateien, weil die Dekompilierung der Regel nicht beibehalten-Zeilennummern (obwohl es sein könnte, wenn es auch angewendet, um die PDB-Datei). Es ist sicherlich nicht wieder mit dem original-code genau so geschrieben, wenn auch mit symbol-Namen (gespeichert in der PDB) kommt es Häufig zu schließen.
Blick in den source-code von ILSpy. Es ist ein open-source-alternative für Reflektor.
Insbesondere es nutzt die Bibliotheken
Mono.Cecil
undMono.Cecil.Pdb
. Ich vermute letzteres kann Ihnen helfen, mit dem, was Sie tun möchten.Den relevanten code-Teile verwenden, der MIT-Lizenz, die eine permissive Lizenz.
Mono.Cecil.Pdb
ist nicht eine gute Wahl?Reflektion verwenden, um den Quellcode auszuführen-Methode:
System.Reflection.MethodBase.GetCurrentMethod().GetMethodBody();
Gibt es eine Vielzahl von Informationen, die Sie bekommen können mittels MethodBase Mitglieder: http://msdn.microsoft.com/en-us/library/system.reflection.methodbase_methods.aspx
Sehen auch hier einige gute Beispiel für die erste MethodBase info während der exception-Behandlung : http://msdn.microsoft.com/en-us/library/system.reflection.methodbase.getmethodbody.aspx#Y563