Mon scénario: Je souhaite écrire dans une partie du fichier journal du code où une exception est arrivée (par exemple 5 lignes avant et 5 lignes après ligne, où une exception s'est produite - ou au moins tout le code de cette méthode). p>
Mon idée est de décompiler le fichier PDB dans le code C # et de ce fichier décompilé, trouvez une méthode qui s'est passée à l'exception du bloc de capture. P>
fichier PBD existe et mon application est construite comme version de débogage. Je sais qu'il existe des outils qui permettent à travers son interface graphique (par exemple le réflecteur) pour décompiler, mais je veux avoir cette fonctionnalité de mon code. P>
Comment faire? P>
3 Réponses :
Regardez dans le code source de ILSPY. C'est une alternative open source pour le réflecteur. P>
En particulier, il utilise les bibliothèques Les pièces de code pertinentes utilisent la licence MIT, qui est une licence permissive. p> mono.cecil code> et
mono.cecil.pdb code>. Je soupçonne que ce dernier peut vous aider avec ce que vous voulez faire. P>
Veuillez éviter ILSPY et utiliser le réflecteur, vous vous sauverrez quelques problèmes.
@ Bartoszwójcik Pourriez-vous s'il vous plaît expliquer pourquoi utiliser mono.cecil.pdb code> n'est-il pas un bon choix?
La même raison DE4DOT abandonnée mono.cecil pour les manipulations .NET
@ Bartoszwójcik Comment intégreriez-vous le réflecteur dans votre application pour générer des informations de débogage prolongées? Sa licence permet-elle même cela?
Le PDB contient le mappage entre MSIL et le nom de fichier / numéro de ligne source. Ceci est très utile lorsque vous pouvez revenir en arrière et regarder les fichiers source d'origine, car la décompilation ne préserve généralement pas les numéros de ligne (bien que cela puisse également utiliser le fichier PDB). Cela ne récupère certainement pas le code d'origine exactement comme écrit, bien que les noms de symboles (aussi stockés dans la PDB), il s'approche souvent. P>
Utilisez la réflexion pour obtenir le code source de la méthode d'exécution: Il existe une variété d'informations que vous pouvez utiliser ModyBase Membres: http://msdn.microsoft.com/en-us/library/system.reflet.methodbase_methods.aspx p>
Regardez également ici pour un bon exemple pour obtenir une méthode Base info tandis que la manipulation des exceptions: http://msdn.microsoft.com/en-us/library/system.reflection.Methodbase.getMethodbody.aspx#y563 P> System.reflection.Methodbase.getCurrentMethod (). getMethodbody (); code> p> p>
GetMethodbody () ne me permet pas de voir le code source de la méthode.
Le CLR utilise déjà le fichier .pdb. C'est ce qui produit le code source et les annotations de numéro de ligne à l'exception de StackTrace. Comparez-vous à la trace de la pile que vous obtenez sans le fichier .pdb en place pour voir la différence. Il ne sert à rien de chercher plus, c'est ce qui est possible.