进程是否有可能在Windows上捕获另一个进程的未处理异常?

时间:2010-03-05 10:03:23

标签: c++ windows exception

进程是否有可能捕获系统上另一个进程的未处理异常?

如果可能,在哪种情况下可行?例如,如果第二个过程没有由第一个过程启动吗?

我主要是寻找有关原生c ++的答案。

3 个答案:

答案 0 :(得分:3)

Native(AKA标准)C ++没有多个进程的真实概念,也无法捕获跨进程边界抛出的异常。并没有办法在这些边界上抛出异常,而是这样。

答案 1 :(得分:3)

Windows异常:结构化异常处理(SEH)是每个线程。进程中的另一个线程可能能够操纵目标线程的堆栈来插入自己的处理程序,但这很难做到(特别是在x86上缺少一致的调用约定)。另一个过程可以注入一个dll&线程进入一个进程来做到这一点。这很难做到,特别是没有与目标流程的细节紧密耦合(调用什么函数以及如何调用)。

第二个想法调试器可以这样做,因此Win32调试器API必须具有此功能。进程可以调试同一会话中的其他进程(具有更低或相同的完整性级别),或者如果用户对任何进程具有“调试进程”特权。

答案 2 :(得分:1)

是。 Matt Pietrek explains how。向下滚动到“VectoredExceptionHandling是一种干净,易于扩展的方式来查看所有异常”部分。还有示例代码。