2012-04-10 68 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