如何使用 Visual Studio 2017 在 C++ 中跟踪未经处理的异常

How to trace an unhandled exception in C++ using Visual Studio 2017

提问人:Dominick 提问时间:11/1/2018 最后编辑:fewlinesofcodeDominick 更新时间:11/1/2018 访问量:1048

问:

我目前正在为客户修复一个项目。先介绍一下这个项目的信息:

  1. 最初在 Visual Studio 2012 中使用xp_v110生成工具开发
  2. 解决方案中的多个项目
  3. 当前使用 VS 2015/xp_v140 生成工具在 Visual Studio 2017 中更新/调试
  4. Windows 10 上工作

应用程序将在调试模式下运行,但是如果我在启动调试会话后离开应用程序(即不打开/单击应用程序以在托盘中最小化启动时打开它),应用程序将在 1-2 分钟后崩溃。

不幸的是,IDE 显示崩溃发生在 chkstk.asm 中,并显示以下消息:

Exception thrown at 0x0064EDF9 in <<exe name>>: 0xC00000FD: Stack overflow (parameters 0x00000000, 0x000A2000).

我已经更新了异常设置以在抛出所有 C++ 异常时中断,选中了 ,并包装了在 try 块中运行的初始方法,但是我永远无法捕获 C++ 代码中的错误;它始终出现在 chkstk.asm 文件中。"Break when this exception type is thrown"

关于我如何找出 C++ 代码中发生异常的位置的任何建议。就像我说的,这是客户端的更新,原始程序员不可用,而且他们从未评论过他们的代码,所以尝试完成所有这些已经足够困难了。任何帮助/建议将不胜感激。提前致谢。

未处理的 C++ 异常

评论

4赞 Some programmer dude 11/1/2018
不幸的是,这里混淆了多个术语:在硬件或操作系统级别发生的低级崩溃通常称为异常。但是,此类异常不是 C++ 异常,因此不能被捕获。
3赞 Dialecticus 11/1/2018
代码用完了函数调用堆栈。最有可能的原因是某种无限递归调用。若要在引发这些异常时在调试器中捕获这些异常,请选中“Win32 异常”而不是“C++ 异常”。当调试器暂停时,请查看“调用堆栈”视图。
1赞 Dominick 11/1/2018
@Tom - 是的,错误发生在 chkstk.asm (test dword ptr [eax],eax ; probe page.
1赞 jacob 11/1/2018
根据我对 chkstk 的理解,并不是 chkstk 有错误,而是项目中某处有一个函数分配了太多的堆栈空间。我会看到@Dialecticus建议。
1赞 darune 11/1/2018
正如 @Dialecticus 所说 - 尽管有时在有问题的堆栈溢出发生之前手动破坏程序更容易 - 然后使用 F10 和 F11 开始调查为什么递归没有停止。

答: 暂无答案