jjzjj

.net - 在混合模式 C++ 项目中从 CLR 到 SEH 异常获取敏感信息

混合模式C++项目。native代码正在调用托管代码。托管代码可能会引发异常。我可以使用vector异常处理程序在native模式下捕获所述异常;我可以看到它的PEXCEPTION_POINTERS。告诉代码0xE0434F4D,意味着它是一个CLR异常,就在那里。问题:有什么方法可以从伴随数据中获取任何有意义的信息(异常类、消息、堆栈跟踪等)?ExceptionInformation中有一个参数,它看起来像是指向某物的指针... 最佳答案 不,太晚了。您得到的只是异常代码。如果原始托管异常是由处理器故障引起的,您可能会在Excep

c++ - 如何抛出 EXCEPTION_FLT_UNDERFLOW?

我需要一个示例代码,它会抛出EXCEPTION_FLT_UNDERFLOW。我已经有了处理该异常的代码。现在我需要样本,它会抛出它。有什么建议吗? 最佳答案 假设您想要触发此操作的实际代码:#includeintmain(){_controlfp_s(NULL,0,_MCW_EM);//enableallfloatingpointexceptionsfloatf=1.0f;while(f){f/=2.0f;//__asmfwait;//optional,ifyouwanttotraptheunderflowsooner}return

c++ - 使用多线程服务器进行结构化异常处理

Thisarticle很好地概述了为什么结构化异常处理不好。有没有一种方法既能防止服务器崩溃,又能解决文章中提到的问题?我有一个服务器软件可以同时运行大约400个连接的用户。但如果出现崩溃,所有400名用户都会受到影响。我们添加了结构化异常处理并享受了一段时间的结果,但最终不得不将其删除,因为一些崩溃导致整个服务器挂起(这比让它崩溃并自行重启更糟糕)。所以我们有这个:使用SEH:400名用户中只有1名用户遇到大多数崩溃问题没有SEH:如果任何用户崩溃,所有400人都会受到影响。但有时使用SEH:服务器挂起,所有400位用户和尝试连接的future用户都会受到影响。

c++ - 通过 catch(...) 从 SEH 异常中获取有意义的信息?

早上好!编辑:这不是重复的,因为它专门与SEH有关,而不是代码级抛出的异常。我正在使用SEH来捕获一些不可靠的库抛出的硬件错误。我想从catchall异常中获取更多信息。下面的代码模拟了我在做什么。如您所见,我正在使用boost的current_exception_diagnostic_information,但它只是吐出“没有可用的诊断信息”。-不是很有帮助。是否有可能至少获得在未捕获异常的情况下本应返回的终止代码?(在本例中为0xC0000005,访问冲突)#include"stdafx.h"#include#include#includeintslowTask(){//simul

c++ - 结构化异常情况下的堆栈展开

这个问题更清楚地描述了here所描述的问题.我做了更多调查,发现堆栈展开并没有发生在以下代码段中:classOne{public:intx;};classWrapper{public:Wrapper(CStringcsText):mcsText(csText){CStringcsTempText;csTempText.Format("Wrapperconstructor::%s\n",mcsText);OutputDebugString(csTempText);}~Wrapper(){CStringcsTempText;csTempText.Format("Wrapperdestruc

c++ - 混合 C++ 异常处理和 SEH (windows)

我有一个函数,我在其中调用getaddrinfo()以获取目标内存由系统分配的sockaddr*。正如许多人所知,您需要调用freeaddrinfo()来释放由getaddrinfo()分配的内存。现在,在我的函数中,有几个地方可能会抛出异常,因为某些函数失败了。我的第一个解决方案是将freeaddrinfo()合并到每个ifblock中。但这对我来说确实很难看,因为无论如何我都必须在我的函数返回之前调用它,所以我想出了SEH的try-finally...但我遇到的问题是,不允许将throw-statements编码到__try-block中然后,我在msdn上阅读并尝试将throw语

windows - 关于汇编远程调用和天堂之门,触发异常的段调用是否会在抛出异常之前推送 cs 和 eip?

目前我正在玩被称为“天堂之门”的windows/WOW64技巧,正如你们中的一些人可能知道的那样,即使在x86程序中,它也允许我们进入x64模式(我很惊讶当我测试了它,它成功了!)但我知道并非所有Windows版本都支持它,所以我的代码(因为有代码)使用seh,它看起来像这样:start:use32;;setupseh...call$33:.64bits_code;specify0x33segment,it'sthateasy;;successinx64mode,quitseh...jmp.exit.64bits_code:use64;;...use32retf.seh_handler

c++ - 带有/SAFESEH 的自定义 SEH 处理程序

我目前正在尝试用C++创建一个编译器,它可以在运行时生成机器代码。但是,我目前正在尝试启用安全异常处理(使用/SAFESEH进行编译)。我的自定义异常处理程序在Debug模式下工作,但是当我在Release模式下运行相同的代码时,我的进程就终止了。我很确定问题是我未能像这样注册我的自定义异常处理程序,因为当我使用/SAFESEH:NO编译我的代码时,即使在Release模式下一切正常。我的自定义异常处理程序是用我的其他C++代码编写的,我试图通过向我的项目添加一个.asm文件来将其注册为异常处理程序,内容如下:.386.modelflat_MyExceptionHandler@16pr

c++ - WndProc 中的 64 位异常静默失败

以下代码在Windows732位下运行时会出现硬故障:voidCTestView::OnDraw(CDC*/*pDC*/){*(int*)0=0;//CrashCTestDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);if(!pDoc)return;//TODO:adddrawcodefornativedatahere}但是,如果我在Windows764位上尝试这个,我只会在输出窗口中得到这个:First-chanceexceptionat0x13929384inTest.exe:0xC0000005:Accessviolationwritinglo

windows - Visual Studio 2010 中的编程数据断点

我一直在尝试使用编程数据断点,就像CBreakpoint例如,通过使用SetThreadContext直接设置调试寄存器。我能找到的大多数引用资料都表明VisualStudio在遇到数据断点时仍然会中断,即使它本身没有设置该数据断点。但是,这似乎不是VisualStudio2010的工作方式。当程序未被调试时,我的数据断点可以正常工作(它因STATUS_SINGLE_STEP而崩溃,这是数据断点引发的异常)。如果我使用WinDbg进行调试,它也会正常中断。但是在任一VisualStudio2010下调试它时,它似乎只是继续运送并忽略断点。有没有人有在Windows7下使用VisualS