gpt4 book ai didi

debugging - 有没有办法知道另一个引发异常的进程中的线程 ID?

转载 作者:行者123 更新时间:2023-12-04 15:48:39 25 4
gpt4 key购买 nike

我正在尝试使用 MiniDumpWriteDump() API 从另一个进程 A 转储崩溃的进程 B。我这样做是因为 MSDN我说过了:

MiniDumpWriteDump should be called from a separate process if at all possible, rather than from within the target process being dumped.



MiniDumpWriteDump() 定义如下:
BOOL WINAPI MiniDumpWriteDump(
__in HANDLE hProcess,
__in DWORD ProcessId,
__in HANDLE hFile,
__in MINIDUMP_TYPE DumpType,
__in PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
__in PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
__in PMINIDUMP_CALLBACK_INFORMATION CallbackParam
);

特别是,ExceptionParam 的类型为 PMINIDUMP_EXCEPTION_INFORMATION,其定义如下:
typedef struct _MINIDUMP_EXCEPTION_INFORMATION {
DWORD ThreadId;
PEXCEPTION_POINTERS ExceptionPointers;
BOOL ClientPointers;
} MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;

现在我想知道如何准备以下2个参数:

线程 ID
抛出异常的线程的标识符。

异常指针
指向 EXCEPTION_POINTERS 结构的指针,指定异常的计算机独立描述和异常发生时的处理器上下文。

在进程 A 中运行时,如何获取进程 B 中的错误线程 id 和异常指针?

谢谢。

最佳答案

A pointer to a MINIDUMP_EXCEPTION_INFORMATION structure describing the client exception that caused the minidump to be generated. If the value of this parameter is NULL, no exception information is included in the minidump file.



尽管该参数被标记为 __in而不是 __in_opt你确实可以在这里传递NULL。要首先从目标进程获取该信息,您的进程无论如何都必须对其进行调试。

已知进程 A 如何以及何时进行进程 B 的小型转储?如果 A 确实在调试 B,当 WaitForDebugEvent 返回 EXCEPTION_DEBUG_EVENT 时,信息在信息结构中可用。

如果 A 没有调试 B,那么可能 B 通过某种 IPC 机制告诉 A“嘿,我崩溃了,进行小型转储”。在这种情况下,B 可以自己进行转储,也可以通过相同的 IPC 机制将异常信息传递给 A。尽管如此,这也是有问题的,原因与在崩溃过程中调用 MiniDumpWriteDump 的原因相同,如果事情正在爆炸,事情这可能是你需要告诉 A 的。

另一种可能让 A 为 B 转储的机制是 A 安装为 JIT 调试器,在这种情况下,A 将调试 B,您可以使用调试 API 来获取异常信息。

如果 A 只是定期进行 B 的小型转储,那么不一定会有任何异常(exception),因此在这种情况下您可以只传递 NULL。

请注意,如果您打算做类似的事情
WaitForSingleObject(handleToProcessB, INFINITE);
MiniDumpWriteDump(handleToProcessB, ...)

这是行不通的。操作系统保留了很少的东西,主要是进程的退出代码,而不是虚拟地址空间和您需要进行小型转储的堆栈。

关于debugging - 有没有办法知道另一个引发异常的进程中的线程 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4095130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com