2010-11-10 112 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文件,哟你需要从微软下载它们,这样你才能看到外部代码。