- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用类似于 clrdump 的代码在我的托管进程中创建小型转储。
此托管进程调用 C++/CLI 代码,后者调用一些 native C++ 静态库代码,其中可能会抛出 SEH 异常(例如偶尔的访问冲突)。
C# WinForms
->
C++/CLI DLL
->
Static C++ Lib
->
ACCESS VIOLATION
我们的政策是为所有 SEH 异常(捕获和未捕获)生成小型转储,然后将它们转换为 C++ 异常以供应用程序代码处理。这适用于纯原生进程;但是当应用程序是 C# 应用程序时 - 不是那么多。
我看到从 C# 进程中的 SEH 异常生成转储的唯一方法是不捕获它们 - 然后,作为未处理的异常,使用 Application.ThreadException
处理程序来创建一个小型转储。另一种方法是让 CLR 将 SEH 异常转换为 .Net 异常并捕获它(例如 System.AccessViolationException
)——但这意味着不会创建转储,并且信息会丢失(堆栈跟踪信息在 Exception
中并不像迷你转储那么丰富)。
那么我如何通过创建小型转储和将异常转换为 .Net 异常来处理 SEH 异常,以便我的应用程序可以尝试恢复?
编辑
我所说的“不捕获异常”也指捕获然后重新抛出,这确实保留了丰富的异常信息。
现在我正在考虑永远不要抑制 System.Exception
或从 System.SystemException
派生的任何东西。这意味着 AccessViolation
(和 friend )总是导致程序结束并产生转储,并且抛出的所有其他异常都需要派生自某个子类型(ApplicationException
?)。
最佳答案
我发现 Vectored Exception Handling我可以获得任何 SEH 异常的第一机会通知,并利用这个机会生成小型转储。
关于c# - 为混合代码 DLL 中_caught_ SEH 异常生成小型转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2712070/
我最近读了一些关于异常处理和 .Net 框架的书,这似乎让我在开始时更加困惑。 在 CLR 中通过 C# 第四次添加我读到: Also, the .NET Framework exception-ha
我抓了一些 code from internet ,应该用 SEH 处理异常, ASSUME FS:NOTHING PUSH OFFSET Handler PUSH FS:[0]
信息 我的 C++ 程序没有整个程序优化,具有多字节字符集,并启用了带有 SEH 异常的 C++ 异常 (/EHa)。 以下代码读取信息,然后在简单的数学方程中使用读取的信息来确定结果。 问题 这是所
我发布了 question关于验证指针的可访问性。结论是要么使用 IsBadReadPtr 检查指针,要么使用 SEH 捕获异常(最好两者都不使用,并调试应用程序,但这不是这里的问题)。 IsBadR
我创建了一个内存管理器,它分配由两个页面包围的内存,并带有 PAGE_NOACCESS 保护。我调用了一个在 SEH block 中使用此内存的函数,并捕获了此 block 中发生的 ACCESS_V
class seh_exception : public std::exception { public: seh_exception(UINT se_code, PEXCEPTION_P
我正在编写一个小型实用程序(VC 2010,无 clr),它使用第 3 方库执行一项简单的任务(光栅化)。后来的实用程序将被更大的应用程序使用。有时,该实用程序会因第 3 方库中的某些堆损坏而崩溃。没
我看到 Doug Harrison 很好地说明了使用(即捕获)结构化异常的“错误”(参见 question #3)。但是还有什么其他后果呢?例如,如果我有几个使用/eha 编译的项目,与其他使用/eh
我知道总体概述:http://msdn.microsoft.com/en-us/library/dn743843.aspx ;关于 win32 和 win64 的异常机制有很多可用的信息,但 ARM
我读到的一些关于 SEH(结构化异常处理)的文章/答案认为它是“异步的”。 据我了解,这些异常的整个处理部分发生在引发它们的线程上(在 CPU 级别)。基本上,一旦发生异常,执行就会“跳转”到在当前线
我读到的一些关于 SEH(结构化异常处理)的文章/答案认为它是“异步的”。 据我了解,这些异常的整个处理部分发生在引发它们的线程上(在 CPU 级别)。基本上,一旦发生异常,执行就会“跳转”到在当前线
我正在编写一些代码来处理 Windows 结构化异常(在我的例子中使用 _set_se_translator() 将它们转换为 C++ 异常)。 让我担心的是在异常发生时我得到的异常信息中大量使用指针
我完全不熟悉c/c++。我需要编译一个小程序来做一些分析。 这是程序 #include #include #include //#include #include int ExceptionHan
我在 StackOverflow 和 CodeProject.net 中阅读了很多关于 SEH 异常 的文章。 在我的 C++ 程序中实现了 SEH 异常 处理后,我受到了堆栈溢出异常的影响,而我的软
我正在读这个article关于 Windows 上的 SEH。这是 myseh.cpp 的源代码 我调试了 myseh.cpp。我分别在第 24 行的 printf("Hello from an ex
我正在用 SEH 做一些实验。在我的代码中,我在 __try 子句中编写了导致 block 的错误,并在 __except() 中编写了处理程序。 __try{ Test *pTest = 0; in
最近,我一直试图让 SEH 异常处理与 MCJIT 一起在 LLVM (3.8.1) 中工作。到目前为止没有任何运气。 从我从网站( http://llvm.org/docs/ExceptionHan
我正在研究原生纤程/协程实现——相当标准,为每个纤程分配一个单独的堆栈,为了切换上下文,寄存器被推送到源上下文堆栈上并从目标堆栈中弹出。它运作良好,但现在我遇到了一个小问题: 我需要 SEH 在光纤中
我正在使用 Google C++ Test Framework 编写一些测试代码忘记初始化某个对象 myObj。这会导致以下错误。 unknown file: error: SEH exception
我目前正在阅读有关结构化异常处理 (SEH) 机制的资料,并在 C++ 中做一些练习。 我不明白的一件事是 - 在excpt.h 文件中有两个重要的定义“groups”: EXCEPTION_DISP
我是一名优秀的程序员,十分优秀!