2011-12-14 56 views
3

運行時得到以下結果!dumpstack over 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 

我的問題是我不能從這個堆棧開始的位置獲得方法名稱。你能告訴我一個命令來追蹤它嗎?

結果這前幾行是:

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 

回答

1

的dumpstack命令接受參數[棧[棧]的底部頂部]所以你可以手動給它一些值。它停在000000000a1369c0,所以你可以嘗試將它作爲堆棧的頂部,並查看它是否可以找到更多信息。如果沒有,您可以嘗試使用類似'dqs 000000000a1369c0'的方式手動重建堆棧,但這隻會匹配原生符號。我從來沒有爲clrstack做過手動堆棧重建。

1

Windbg打開,有兩種類型的調試會話

  1. 轉儲分析
  2. 現場調試。

找到合適的線程的竅門是打開Threads and Processes window並選擇正確的線程。請注意,同一進程中的其他線程將只顯示其運行的一部分。通常在實時調試會話中,您需要頂級線程,那時您將看到整個堆棧。