【发布时间】:2010-03-05 10:03:22
【问题描述】:
一个进程是否有可能捕获系统上另一个进程的未处理异常?
如果可能,在什么情况下可能?例如,如果第二个进程不是由第一个进程启动,是否可能?
我主要是在寻找有关本机 c++ 的答案。
【问题讨论】:
一个进程是否有可能捕获系统上另一个进程的未处理异常?
如果可能,在什么情况下可能?例如,如果第二个进程不是由第一个进程启动,是否可能?
我主要是在寻找有关本机 c++ 的答案。
【问题讨论】:
Native(AKA 标准)C++ 没有真正的多进程概念,也无法捕获跨进程边界抛出的异常。并且没有办法跨越这些边界抛出异常。
【讨论】:
Windows 异常:结构化异常处理 (SEH) 是每个线程的。进程中的另一个线程可能能够操纵目标线程的堆栈以插入自己的处理程序,但这很难做到(尤其是在 x86 上缺乏一致的调用约定的情况下)。另一个进程可以将一个 dll 和线程注入到一个进程中来执行此操作。这很难做到正确,尤其是在没有与目标进程的细节(调用什么函数以及如何调用)紧密耦合的情况下。
重新考虑调试器可以做到这一点,因此 Win32 调试器 API 必须具有此功能。一个进程可以调试同一会话中的其他进程(具有较低或相等的完整性级别),或者如果用户具有“调试进程”特权的任何进程。
【讨论】:
是的。 Matt Pietrek explains how。向下滚动到“VectoredExceptionHandling 是一种查看所有异常的干净、易于扩展的方式”部分。还有示例代码。
【讨论】: