3 votes

Obtenez le nom de la méthode à partir de laquelle cette pile a commencé

J'obtiens le résultat suivant en exécutant !dumpstack sur l'invite de commande windbg.

000000000a136510 000007fed86f404c (MethodDesc 000007fed85d7e60 +0x14c System.Data.SqlClient.SqlParameter.GetActualSize()), calling System_Data_ni+0x10f010
000000000a136530 000007fed86f483d (MethodDesc 000007fed85d7f18 +0x4d System.Data.SqlClient.SqlParameter.GetCoercedValue()), calling System_Data_ni+0x10efc0
000000000a136570 000007fed86f4ac8 (MethodDesc 000007fed85d7fc0 +0x58 System.Data.SqlClient.SqlParameter.ValidateTypeLengths(Boolean))
000000000a136650 000007fed870322d (MethodDesc 000007fed861d7a0 +0x1d Bid.Trace(System.String, Int32)), calling clr+0x2da0
000000000a1366a0 000007fed86f2a98 (MethodDesc 000007fed85c2240 +0x6a8 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(System.Data.CommandBehavior, System.Data.SqlClient.RunBehavior, Boolean, Boolean)), calling (MethodDesc 000007fed85dabe0 +0 System.Data.SqlClient.TdsParser.TdsExecuteRPC(System.Data.SqlClient._SqlRPC[], Int32, Boolean, System.Data.Sql.SqlNotificationRequest, System.Data.SqlClient.TdsParserStateObject, Boolean))
000000000a1366e0 000007fee2babf7d (MethodDesc 000007fee28bedf8 +0x7d System.WeakReference.set_Target(System.Object)), calling 000007fee4123f00 (stub for System.GC.KeepAlive(System.Object))
000000000a136770 000007fed86f23ca (MethodDesc 000007fed85c2230 +0x21a System.Data.SqlClient.SqlCommand.RunExecuteReader(System.Data.CommandBehavior, System.Data.SqlClient.RunBehavior, Boolean, System.String, System.Data.Common.DbAsyncResult)), calling System_Data_ni+0x10ee58
000000000a1367a0 000007fed86fad47 (MethodDesc 000007fed85d9cb0 +0x797 System.Data.ProviderBase.DbConnectionPool.GetConnection(System.Data.Common.DbConnection)), calling (MethodDesc 000007fed85d9348 +0 System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(System.Transactions.Transaction))
000000000a1367e0 000007fee2bdc66b (MethodDesc 000007fee299df68 +0x1b System.Security.CodeAccessSecurityEngine.Check(System.Security.CodeAccessPermission, System.Threading.StackCrawlMark ByRef)), calling clr+0x2da0
000000000a136820 000007fed86f219c (MethodDesc 000007fed85c2220 +0x1c System.Data.SqlClient.SqlCommand.RunExecuteReader(System.Data.CommandBehavior, System.Data.SqlClient.RunBehavior, Boolean, System.String)), calling System_Data_ni+0x10ef48
000000000a136830 000007fed86f1431 (MethodDesc 000007fed85c1d10 +0x21 System.Data.SqlClient.SqlCommand.get_Statistics()), calling System_Data_ni+0x10e8f8
000000000a136860 000007fed86f1fa0 (MethodDesc 000007fed85c20f8 +0x100 System.Data.SqlClient.SqlCommand.ExecuteReader(System.Data.CommandBehavior, System.String)), calling System_Data_ni+0x10eec8
000000000a136890 000007fed86f9f99 (MethodDesc 000007fed85d9b90 +0x59 System.Data.ProviderBase.DbConnectionFactory.GetConnection(System.Data.Common.DbConnection)), calling (MethodDesc 000007fed85d9cb0 +0 System.Data.ProviderBase.DbConnectionPool.GetConnection(System.Data.Common.DbConnection))
000000000a136910 000007fed86f1e74 (MethodDesc 000007fed85c20b8 +0xe4 System.Data.SqlClient.SqlCommand.ExecuteReader(System.Data.CommandBehavior)), calling System_Data_ni+0x10ee68
000000000a136930 000007fed86f0b5d (MethodDesc 000007fed85d72e8 +0x23d System.Data.SqlClient.SqlConnection.Open()), calling (MethodDesc 000007fed861d3c0 +0 Bid.ScopeLeave(IntPtr ByRef))
000000000a136950 000007fed86f50b2 (MethodDesc 000007fed85d8e28 +0x92 System.Data.SqlClient.SqlParameterCollection.Add(System.Object))
000000000a1369c0 000007ff00c075d1 000007ff00c075d1, calling System_Data_ni+0x10ef30

Mon problème est que je ne suis pas en mesure d'obtenir le nom de la méthode à partir de laquelle cette pile a commencé. Pouvez-vous m'indiquer une commande pour le retrouver ?

Ces premières lignes de résultats sont :

    0:045>  !dumpstack
OS Thread Id: 0x2ecc (45)
TEB information is not available so a stack size of 0xFFFF is assumed
Current frame: clr!LogHelp_LogAssert+0x14e54
Child-SP         RetAddr          Caller, Callee
000000000a136100 000007fee4167ca9 clr!PreBindAssemblyEx+0x14c9d, calling clr+0x12e0
000000000a136130 000007fee446962e clr!CreateAssemblyConfigCookie+0x554de, calling clr+0x21a0
000000000a136140 000007fee40d2b44 clr!LogHelp_LogAssert+0x1efe4, calling clr!LogHelp_LogAssert+0xf80
000000000a136210 000007fed8716d76 (MethodDesc 000007fed85d67a0 +0x36 DomainNeutralILStubClass.IL_STUB_PInvoke(SNI_Conn*, SNI_Packet_IOType, SNI_Packet*, ConsumerNum)), calling 000007fee40c89a0 (stub for System.StubHelpers.StubHelpers.BeginStandalone(IntPtr, IntPtr, Int32))
000000000a1362b0 000007fee4167b5c clr!PreBindAssemblyEx+0x14b50, calling clr!LogHelp_LogAssert+0xf10

1voto

syneptody Points 678

Avez-vous essayé "!CLRStack -p" ?

De même, DumpMethodSig permet d'obtenir la signature complète de la méthode.

Voici toutes les commandes que vous pouvez utiliser : http://msdn.microsoft.com/en-us/library/bb190764.aspx

1voto

jcopenha Points 3409

La commande !dumpstack accepte un paramètre [top of stack [bottom of stack]] afin que vous puissiez lui donner manuellement des valeurs. Elle s'arrête à 000000000a1369c0, vous pouvez donc essayer de donner cette valeur comme sommet de la pile et voir si elle peut trouver plus d'informations. Si ce n'est pas le cas, vous pouvez essayer de reconstruire manuellement la pile en utilisant quelque chose comme 'dqs 000000000a1369c0', mais cela ne correspondra qu'aux symboles natifs. Je n'ai jamais fait de reconstruction manuelle de pile pour un clrstack.

1voto

Juan Beringher Points 11

Lorsque Windbg s'ouvre, il existe deux types de sessions de débogage

  1. Analyse des déchets
  2. Débogage en direct.

L'astuce pour trouver le bon fil conducteur est d'ouvrir la page Threads and Processes window et sélectionnez le fil approprié. Notez que les autres threads du même processus ne montreront que leur partie de l'exécution. En général, dans une session de débogage en direct, vous voulez le fil d'exécution le plus élevé, car c'est là que vous verrez la pile entière.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X