背景
- 我有一个带有Poof-Crash [ 1 ] 的应用程序。我相当肯定这是由于堆栈爆炸造成的。
- 该应用程序是多线程的。
- 我正在用“
Enable C++ Exceptions: Yes With SEH Exceptions (/EHa)
”编译。 - 我写了一个 SE Translator 函数并
_set_se_translator()
用它调用。 - 我已经为 和 setup
set_terminate()
和set_unexpected()
. - 要获得 Stack Overflow,我必须在重负载下以发布模式运行几天。在调试器下运行不是一种选择,因为应用程序的执行速度不够快,无法达到查看问题所需的运行时间。
- 我可以通过在执行其中一个函数时添加无限递归来模拟问题,从而测试
EXCEPTION_STACK_OVERFLOW
异常的捕获。 - 我将 WinDBG 设置为故障转储程序,并获得有关所有其他崩溃问题的好信息,但不是这个。故障转储将仅包含一个线程,即“Sleep()”。所有其他线程都已退出。
问题
我尝试过的所有事情都没有导致出现EXCEPTION_STACK_OVERFLOW
异常。
有谁知道如何保证在发布模式下运行时有机会遇到这个异常?
定义
- Poof-Crash:应用程序因“噗”而崩溃并消失得无影无踪。
(考虑到这个网站的名称,我有点惊讶这个问题还没有出现在这里!)
笔记
- 简要发布了一个关于调整堆栈大小以可能更快地强制问题并允许使用调试器捕获它的答案。这是一个聪明的想法,但不幸的是,我不相信它会有所帮助。该问题可能是由导致无限递归的极端情况引起的。缩短堆栈不会很快暴露问题,并且可能会导致有效深度代码中的无关崩溃。好主意,感谢您发布它,即使您确实删除了它。