2012-04-10 16 views
0

Wie liest man diesen Stacktrace? wer kann mir erklären, wie man das versteht, um den Fehler zu beheben.howto lesen ein Stacktrace von C# wie mein Beispiel?

"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

Können Sie uns nicht zeigen, ein Stück Code? – ChaosPandion

Antwort

1

Sie erhalten nicht viel Informationen von diesem Stack-Trace. Sie können den Namen Image lesen, bei dem es sich um den Namen der Assembly handelt, für die die Methoden gelten, und den Namen Function, bei dem es sich um den Namen der Methode handelt.

Offensichtlich gab es eine Ausnahme in den Methoden GeoCaching.Main.btnGoToPin_Click oder TransitionStub, aber der Stack-Trace allein sagt Ihnen nicht, welche Art von Ausnahme oder welche Informationen in das Exception-Objekt geschrieben wurden.

Wenn Sie die Anwendung mit Debuginformationen kompiliert hätten, würden Sie in der Stack-Ablaufverfolgung weitere Informationen erhalten, wie z. B. die Zeilennummer in jeder Methode.

0

Aus den bereitgestellten Informationen kann nur, dass Sie eine Ausnahme innerhalb btnGoToPin_Click haben.

Um die echte Quelle davon zu sehen, fügen Sie einen try/catch in diesem Event-Handler und am wahrscheinlichsten werden Sie den Fehler finden.

Viel Glück

+0

Nein, '312' ist keine Zeilennummer, sondern ein Offset im nativen Code. – Guffa

+0

Korrigiert, verpasst. – Tigran

0

Wie gesagt, ist der Fehler irgendwo in der btnGoToPin_Click ABER die Anwendung in Release-Modus kompiliert, es ist, warum Sie die komplette Stacktrace nicht haben.

Wenn eine Anwendung im Freigabemodus kompiliert wird, führt der Compiler mehrere Optimierungen durch. Die erste, die für Ihren Fall gelten könnte, ist, den Aufruf der Methode durch den Körper dieser Methode zu ersetzen. Dies wird "Inlining-Optimierung" genannt.

Also vielleicht ist Ihr Fehler in einer anderen Methode, die in btnGoToPin_Click aufgerufen wird, aber nicht sichtbar für den Stack-Trace wegen Inlining.

Wenn Sie mehr Informationen wünschen über hier inlining ist ein nice article