问题标签 [structured-exception]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如何保证在 Visual Studio 2005 下的 C++ 中捕获 EXCEPTION_STACK_OVERFLOW 结构化异常?
背景
- 我有一个带有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:应用程序因“噗”而崩溃并消失得无影无踪。
(考虑到这个网站的名称,我有点惊讶这个问题还没有出现在这里!)
笔记
- 简要发布了一个关于调整堆栈大小以可能更快地强制问题并允许使用调试器捕获它的答案。这是一个聪明的想法,但不幸的是,我不相信它会有所帮助。该问题可能是由导致无限递归的极端情况引起的。缩短堆栈不会很快暴露问题,并且可能会导致有效深度代码中的无关崩溃。好主意,感谢您发布它,即使您确实删除了它。
vb.net - 捕获,处理,然后重新抛出异常?
我今天遇到了一个有趣的困境。我有一个处理信息并检查重复值的函数,然后返回下一个不重复的数字。所以,我有这样的事情:
然后在函数的底部,我有一个 catch 块,它通过递增处理重复项,直到我不再有重复项,如下所示:
如您所见,我想专门处理异常,但我也想在完成后抛出它,因为我想提醒函数外的其他代码。
问题是简单地将它扔出带有null
值的函数。我是在想一个try/catch
错误的方法,还是有办法解决这个问题?
c++ - 在给定 _EXCEPTION_POINTERS 结构的情况下,如何获取导致结构化异常的模块名称?(win32 C++)
(Win32平台c++)使用__try和__finally,如何获取异常原因的模块名称(和地址)?我调用 GetExceptionInformation() 但我不确定此信息在哪里。
鉴于在线和 MSDN 中的其他资源,Minidump 处理程序和其他示例代码似乎能够获得它,但我不确定如何获得。
任何参考资料或更具启发性的资源都值得赞赏。
exception - 如何在 VB6 中实现 SEH(结构化异常处理)?
有人可以提供一些在 VB6 中实现 SEH 的例子吗?到目前为止我所看到的一切都是用 C++ 编写的
c++ - 关于 C++ 中的结构化异常 (SEH),我应该了解什么?
每个 C++ 开发人员都应该了解结构化异常的哪些要点?
winapi - UnhandledExceptionFilter 的“应用程序定义”究竟是什么?
MSDN 描述UnhandledExceptionFilter
如下:“如果正在调试进程,则将未处理的异常传递给调试器的应用程序定义的函数。”
但是这个函数显然是由操作系统提供的,在 kernel32.dll 根据同一页面。
那么为什么他们称它为应用程序定义的函数呢?
windows - 非托管 Windows 进程崩溃的方法?
我试图了解非托管用户模式 Windows 进程可能“崩溃”的方式(这实在是一个笼统的术语)。
以下是我目前所知道的方法:
- 未处理的结构化异常
- 默认 UnhandledExceptionFilter:pre-Vista 中的事后调试器;Vista+ 中的 WerFault
- Custom UnhandledExceptionFilter: 可以为所欲为,包括悄悄退出?
- “硬”崩溃(不确定是否有技术术语)
- 例如,在处理堆栈溢出时点击堆栈溢出保护页面:操作系统只是让进程消失得无影无踪?
- “正常”退出:
- 例如,语言提供自己的错误处理机制,使操作系统看起来像应用程序正常关闭一样致命崩溃。
这大致正确吗?用户模式 Windows 进程是否有任何其他方式死亡?
c++ - 来自标准库调用的结构化异常 (SE)
我有调用 ::fgetpos 的代码,这会导致无法捕获的内核异常(我的 VS 2008 项目中有选项 /ehs)。但我不禁认为标准库例程不应该抛出这些异常。
更新:我尝试调用 ::fgetpos(0, &foo),这显然是错误的,而且我确实收到了内核级异常。我很困惑。为什么 C++ 标准库不执行最基本的参数检查(检查空指针)并引发 std::invalid_argument?
是否有任何标准库例程执行此类基本检查,或者它们是否都愉快地导致程序终止?
c++ - 使用结构化异常处理 (SEH) 的后果?
我看到 Doug Harrison 很好地说明了使用(即捕获)结构化异常的“错误”(参见问题 #3)。但是还有什么其他后果?例如,如果我有几个使用 /eha 编译的项目,与使用 /ehs 编译的其他项目混合,会发生什么情况?当库相互链接(编译时或运行时)时是否存在问题?
但这只是一个例子。可能还有什么问题?
c++ - SEH 错误报告
我有一个 Visual Studio 2008 C++ 程序,该程序包含在__try
/__except
块中以捕获任何 SEH 异常。异常过滤器会创建错误日志并为用户提供有关如何提交缺陷报告的详细说明。
过滤器中的代码是否需要包装在另一个__try
/__except
块中?如果不是,如果它例外会发生什么?如果有,应该如何处理?
谢谢,保罗
编辑:
如果MyFilter
引发异常,那么我将进入无限异常循环。所以,看起来它确实需要__try
/__except
处理。我正在考虑这样做:
在这种情况下,程序应该有一个异常终止,并且应该将异常传递给操作系统来处理。那是对的吗?