最近,我經常遇到類型如何調試System.StackOverflowException而不鏈接到源代碼?
的錯誤「類型‘System.StackOverflowException’ 的未處理的異常出現在未知模塊。」
這發生在一個遊戲(我開發)與一個相當大的代碼庫(C#/ XNA)。但通常只有在遊戲過程的幾分鐘後(而不是在每次運行中)都會發生錯誤。
問題是,不幸的是,Visual Studio調試器似乎無法進一步本地化問題,只是讓我檢查彙編代碼而不參考源代碼行。如何調試這樣的錯誤?我猜想像Valgrind這樣的工具在C#中不可用。有沒有更好的調試器可以告訴我問題在源代碼中的本地化位置?
在下面的建議答案中應用步驟時可用的調用堆棧。它是:
[email protected]() + 0x15 bytes
[email protected]() + 0x15 bytes
[email protected]() + 0xcb bytes
[email protected]() + 0x43 bytes
clr.dll!CLREvent::CreateManualEvent() - 0x15f3bb bytes
clr.dll!CLREvent::CreateManualEvent() - 0x15f37a bytes
clr.dll!CLREvent::WaitEx() + 0x47 bytes
clr.dll!CLREvent::Wait() + 0x19 bytes
clr.dll!Thread::WaitSuspendEventsHelper() + 0xa8 bytes
clr.dll!Thread::WaitSuspendEvents() + 0x17 bytes
clr.dll!Thread::RareEnablePreemptiveGC() + 0x181977 bytes
clr.dll!Thread::RareDisablePreemptiveGC() + 0x38e3 bytes
clr.dll!Debugger::SendException() + 0x12b bytes
clr.dll!Debugger::LastChanceManagedException() + 0x19f bytes
clr.dll!NotifyDebuggerLastChance() + 0x79 bytes
clr.dll!WatsonLastChance() + 0x166 bytes
clr.dll!EEPolicy::HandleFatalStackOverflow() + 0x189 bytes
clr.dll!EEPolicy::HandleStackOverflow() + 0xd8 bytes
clr.dll!_COMPlusFrameHandler() + 0xff302 bytes
[email protected]() + 0x26 bytes
[email protected]() + 0x24 bytes
[email protected]() + 0xd3 bytes
[email protected]() + 0xf bytes
clr.dll!SystemNative::ArrayCopy() + 0x19 bytes
mscorlib.ni.dll!6ed326a2()
Frames below may be incorrect and/or missing, no symbols loaded for mscorlib.ni.dll
你甚至沒有得到一個堆棧跟蹤? –
如果您有源代碼訪問權限,請附加調試器並在本地運行它,它會將您帶到拋出異常的行 – prthrokz
Stackoverflow **不是論壇** –