我想做一个进程外异常处理程序,并且我创建了一个看门狗进程,它在子进程引发异常时进行专门的异常处理。我已经通过 events 成功调用了 watchdog 进程。我面临的问题是尝试将异常信息指针传递给另一个进程。
我在这里登陆了传递一个指向由 exec() 生成的进程的指针,并知道在共享内存中传递指针有这个问题:
“如果你使用共享内存,你不能传递指针。指针将包含虚拟地址,这与一个进程不同。你必须交换偏移值,基于共享内存区域的开始。
如果您不使用共享内存,则无法交换任何类型的指针:其他进程将无法访问您进程的内存。”
现在我该如何克服呢?
过程1:
struct mytest
{
_EXCEPTION_POINTERS * except ;
DWORD ThreadId ;
DWORD ProcessId ;
}
OpenFileMapping ( ) ;
void * pBuf = MapViewOfFile ( ) ;
mytest passdata ;
CopyMemory ( pBuf , &passdata , sizeof ( passdata ) ) ;
UnMapView ( ) ;
CloseHandle ( ) ;
(例如)过程 2:
cout << passdata->except->ExceptionRecord->ExceptionCode << endl ;
会崩溃。我理解这是因为虚拟地址是特定于进程的。但是在这种情况下如何将异常信息传递给不同的进程并编写一个小型转储?
PS:我什至尝试单独传递 PEXCEPTION_RECORD 结构,但不起作用。