J'utilise Windbg pour charger un vidage sur incident à partir du code managé (C#, une application console construite pour Any CPU), et un vidage sur incident est créé sur la plate-forme x64. Je débogue sur la plate-forme x64. J'ai besoin de la commande suivante pour charger le symbole privé de mon application:symbole privé chargé mais aucun numéro de ligne affiché?
Voici les commandes que j'utilise dans Windbg. Ma confusion est, lors de l'utilisation de la commande suivante, aucune information de numéro de ligne n'est montrée dans la trace de la pile. Des idées ce qui ne va pas? Ai-je besoin de définir le chemin source?
0:016> ~6 e!clrstack
EDIT 1: J'ai rencontré quelques problèmes avec l'utilisation pe et U pour trouver trace de la pile où l'exception est levée!.
Voici mon processus de débogage. Au début, j'utilise! Pe pour imprimer la trace de pile pour l'objet exception, quand j'utilise! U pour diassembler le code. Le problème que je trouve est! U va diassembler tout le code de fonction de FooService.ProcessOrders(), et je veux trouver l'endroit exact où dans la fonction FooService.ProcessOrders l'accident se produit. Je trouve aussi que le code IL annoté ne contient que des appels de fonction que j'ai faits (pour le code C# non-fonction, par exemple a = a * 2, seul le langage assembleur est affiché), pas exactement IL mappé à chaque ligne de code C# 1) est-ce le bon comportement attendu? (2) Quelle est la solution ou une autre suggestion pour trouver le code C# exact de mon analyse posté ici?
!pe 0000064280155325
StackTrace (generated):
SP IP Function
000000001A56DA70 00000642B74E3B7A System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(System.Data.Common.DbAsyncResult, System.String, Boolean)
000000001A56DB10 00000642B74E3FCC System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
000000001A56DB90 0000064280155325 FooService.ProcessOrders()
000000001A56F3E0 0000064280153A21 FooService.RountineJob()
!U 0000064280155325
merci à l'avance, George
Merci! Si j'ai un vidage sur incident avec des codes source complets (code managé C#) de mon application, quel est le moyen le plus simple de trouver les plantages/ruptures de source à partir de quelle ligne de code managé en utilisant Windbg? Si Windbg ne peut pas atteindre cet objectif, quels autres outils peuvent être utiles? – George2
En cas de panne je pense que vous parlez d'une exception non gérée. Si tel est le cas, vous pouvez trouver l'exception sur le fil approprié. Utilisez la commande! Threads pour afficher tous les threads gérés ainsi que les exceptions sur ceux-ci. La commande! Pe listera l'objet d'exception en détail. Pour plus d'informations s'il vous plaît voir cet excellent blog http://blogs.msdn.com/tess/ –
Oui, Cerveau, je parle d'exceptions non gérées. J'ai essayé d'utiliser! Pe et!threads, ils fournissent des informations, mais depuis l'exception (SqlException) peut être levée à partir de quelques lignes différentes (scénarios) à partir d'une fonction spécifique de mon code. Et en utilisant! Pe et! Threads peut me dire quelle est la fonction de l'exception, mais si la fonction pourrait jeter l'exception dans différents endroits/scénarios, comment dire où l'exception est lancée? – George2