2010-11-10 111 views
2

我想在拋出stackoverflow異常時查看調用堆棧。 (即我想指出什麼遞歸調用導致堆棧溢出)。 清除調用堆棧,我可以看到的所有內容都是「外部代碼」。當堆棧溢出流程異常拋出時在Visual Studio 2010中查看CallStack

編輯我跟着克里斯Schmich的建議(後面的文章),現在我有一個像下面的調用堆棧,這只是一個簡單的控制檯應用程序,我正在寫,注意到在屏幕上沒有提及Main()鏡頭:

alt text

EDIT2:我跟克里斯Schmich的關於針對不同的線程調用棧的意見,但我似乎仍不能查看我的控制檯應用程序的調用堆棧,這是我可以看到:

alt text

有人有什麼想法嗎?

回答

4

您看到的[External Code]幀是因爲調試器的「我的代碼」功能。調試器會隱藏堆棧幀,因爲它們不在您的代碼中。關於JMC的一些細節可以在this blog post中找到。

您可以禁用剛纔我通過執行以下代碼:

  • 調試»選項和設置...»取消選中‘啓用僅我的代碼(僅託管)’»單擊OK

你現在應該可以看到所有的堆棧幀。

江鈴的一個例子,當我踏進一個簡單的C#控制檯應用程序啓用了JMC,我只看到我的解決方案的代碼...

alt text

...並與江鈴禁用,我看到框架代碼,以及...

alt text

+0

感謝您的這一點,但是在執行以下步驟之後,我現在可以看到當拋出異常時,我可以在堆棧中調用5個調用。非他們是從我的代碼。在堆棧的頂部是..... RunUserAssembly(),底部是[Native to Managed Transition]。你有什麼想法,我可以從這裏查看我感興趣的部分調用堆棧嗎? – bplus 2010-11-10 21:20:34

+0

感謝您抽出時間拍攝屏幕截圖 - 我編輯了我的原始文章並添加了屏幕快照... – bplus 2010-11-10 21:46:02

+0

@bplus:該截圖來自不同的線索,這就是爲什麼你沒有看到你的「主」 。堆棧溢出可能發生在另一個線程上。打開線程窗口(Debug»Windows»Threads)查看並切換活動線程。調換堆棧將在您切換線程時更新。 – 2010-11-10 21:53:47

0

檢查這一點,上載符號的段落 Loading Symbols 它們是* .pdb文件,喲你需要從微軟下載它們,這樣你才能看到外部代碼。