- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我尝试将矢量异常处理添加到我的 Win32 DLL,但是对 AddVectoredExceptionHandler
的调用永远不会回来。我只是得到无用的 <app name>.exe has stopped working
对话。但是,如果我使用 Visual C++ 调试器调试 dll,那么它确实可以工作,并且在适当的时间调用处理函数,一切都很好。
明确地说,我在 DLL 初始化时添加处理程序,就像这样
OutputDebugString("before adding\n");
AddVectoredExceptionHandler( 1, VectoredExcepHandler );
OutputDebugString("after adding\n");
当不通过调试器运行时,DebugView 显示“添加前”而不是“添加后”。
处理程序本身如下所示:
static LONG CALLBACK VectoredExcepHandler( PEXCEPTION_POINTERS exInfo )
{
OutputDebugString("reached handler\n");
return EXCEPTION_CONTINUE_SEARCH;
}
哦,如果重要的话,我正在运行 Vista Home 64。
事件查看器显示错误是 kernel32.dll 中的访问冲突。
更多的发现几乎解决了这个问题:我发现如果我注释掉 OutputDebugString
调用处理程序,错误消失了。所以我想有一些与 OutputDebugString
不兼容的异常.显然它不是我可能想要检查的常见问题之一,例如访问冲突和无效指令,因为如果我在调用 OutputDebugString
之前检查这些异常代码, 一切顺利。
最佳答案
OutputDebugString
在调用时引发异常。所以你的异常处理程序通过调用它导致无限递归,这会导致堆栈溢出。参见 here了解更多详情。
Internally, a debug string is handled as an exception. OutputDebugString calls RaiseException with DBG_PRINTEXCEPTION_C (defined as 0x40010006) and the string address and size as the exception parameters.
关于windows - 为什么 AddVectoredExceptionHandler 会使我的 DLL 崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25634376/
Some resources似乎建议而不是使用 SetUnhandledExceptionFilter 要捕获未处理的异常,可以使用 AddVectoredExceptionHandler 通知所有异
我正在尝试针对某些情况改进异常诊断(更像是基本的崩溃处理),其中 SetUnhandledExceptionFilter ( https://msdn.microsoft.com/en-us/libr
我尝试将矢量异常处理添加到我的 Win32 DLL,但是对 AddVectoredExceptionHandler 的调用永远不会回来。我只是得到无用的 .exe has stopped workin
我遇到了一个问题,我传递给 SetUnhandledExceptionFilter 的函数当异常代码 c0000374 引发时没有被调用。但它适用于异常代码 c0000005。然后我尝试使用 AddV
我是一名优秀的程序员,十分优秀!