Comment décompiler pdb à obtenir code source en C#?
Mon scénario:
Je veux écrire dans le fichier log de la partie du code où l'exception s'est passé (par exemple 5 lignes avant et 5 lignes après la ligne où l'exception s'est passé - ou, au moins, tout le code de cette méthode).
Mon idée est de décomposer fichier pdb dans le code C# et à partir de ce décompilé fichier trouver une méthode qui est allé en exception dans le bloc catch.
Pbd fichier existe et mon application se construire en tant que version de débogage. Je sais qu'il existe des outils qui permet grâce à son interface graphique (par exemple Réflecteur) pour faire de la décompilation, mais je veux avoir cette fonctionnalité à partir de mon code.
Comment faire?
OriginalL'auteur Bero | 2011-07-04
Vous devez vous connecter pour publier un commentaire.
L'APB contient le mappage entre MSIL et le nom de fichier source /numéro de ligne. Ceci est particulièrement utile lorsque vous pouvez revenir en arrière et regarder les fichiers source d'origine, parce que la décompilation généralement ne conserve pas les numéros de ligne (bien qu'il pourrait, s'il a également utilisé le fichier PDB). Il n'est certainement pas à récupérer le code d'origine exactement comme c'est écrit, mais avec des noms de symbole (également stockées dans la PDB), il vient souvent à proximité.
OriginalL'auteur Ben Voigt
Regarder dans le code source de ILSpy. C'est une alternative open source pour Réflecteur.
En particulier, il utilise les bibliothèques
Mono.Cecil
etMono.Cecil.Pdb
. Je soupçonne ce dernier peut vous aider avec ce que vous voulez faire.Le code de pièces d'utiliser la licence MIT, qui est une licence permissive.
Pourriez-vous expliquer pourquoi l'utilisation de
Mono.Cecil.Pdb
n'est pas un bon choix?La même raison de4dot abandonné Mono.Cecil .NET manipulations, d'obtenir les faits.
Comment voulez-vous intégrer Réflecteur dans votre application pour générer de l'étendue des informations de débogage? Ne sa licence permettent même de qui?
OriginalL'auteur CodesInChaos
Utiliser la réflexion pour obtenir le code source de la méthode d'exécution:
System.Reflection.MethodBase.GetCurrentMethod().GetMethodBody();
Il existe une variété d'info, vous pouvez obtenir de l'aide MethodBase membres: http://msdn.microsoft.com/en-us/library/system.reflection.methodbase_methods.aspx
Aussi regarder ici un bon exemple pour obtenir MethodBase info alors que la gestion des exceptions : http://msdn.microsoft.com/en-us/library/system.reflection.methodbase.getmethodbody.aspx#Y563
OriginalL'auteur Mrchief