2012-04-10 67 views
0

如何閱讀這個stacktrace? 誰可以解釋我如何理解這個問題來解決這個錯誤。如何從c#中讀取堆棧跟蹤像我的例子?

"Frame Image    Function                Offset  
0  coredll.dll  xxx_RaiseException             19   
1  mscoree3_7.dll                   436488  
2  mscoree3_7.dll                   386545  
3  mscoree3_7.dll                   540936  
4       TransitionStub              0   
5       GeoCaching.Main.btnGoToPin_Click          312  
6       System.Windows.Controls.Primitives.ButtonBase.OnClick    132  
7       System.Windows.Controls.Button.OnClick        120  
8       System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp 228  
9       System.Windows.Controls.Control.OnMouseLeftButtonUp     100  
10       MS.Internal.JoltHelper.FireEvent          896  
11  mscoree3_7.dll                   429164  
12  mscoree3_7.dll                   430528  
13  mscoree3_7.dll                   610803  
14  mscoree3_7.dll                   374593  
15                        0   
16  agcore.dll  CCoreServices::CLR_FireEvent           385  
17  npctrl.dll  CControlBase::ScriptCallback           435  
18  npctrl.dll  CXcpDispatcher::OnScriptCallback          547  
19  npctrl.dll  CXcpDispatcher::OnReentrancyProtectedWindowMessage     479" 
+0

你能不能告訴我們一些代碼? – ChaosPandion 2012-04-10 07:35:18

回答

1

您不會從該堆棧跟蹤中獲得太多信息。您可以讀取Image名稱,該名稱是該方法所在的程序集的名稱,名稱即Function,該名稱是該方法的名稱。

看起來好像在GeoCaching.Main.btnGoToPin_ClickTransitionStub方法中有個例外,但是單獨使用堆棧跟蹤並不能告訴你什麼樣的異常或者在Exception對象中放入了什麼信息。

如果您將編譯的應用程序的調試信息打開,您將在堆棧跟蹤中獲得更多信息,如每個方法中的行號。

0

從提供的信息可以只有你在btnGoToPin_Click裏面得到了一個例外。

要查看真實源代碼,請在該事件處理程序中添加一個try/catch,最有可能的是您會發現錯誤。

好運

+0

不,「312」不是行號,它是本地代碼中的偏移量。 – Guffa 2012-04-10 07:38:25

+0

更正,錯過。 – Tigran 2012-04-10 07:39:16

0

正如之前所說,錯誤的是某處btnGoToPin_Click 應用程序在發佈模式下進行編譯,這就是爲什麼你沒有完整的堆棧跟蹤。

當應用程序以發佈模式編譯時,編譯器會進行幾次優化。 適用於您的案例的第一個方法是將此方法的主體替換爲小方法。這被稱爲「內聯優化」

所以也許你的錯誤是在另一個方法中調用btnGoToPin_Click但由於內聯而不可見的堆棧跟蹤。

如果您想了解這裏的內聯更多的信息是nice article