Ich versuche MiniDumpWriteDump() API zu verwenden, um einen abgestürzten Prozess B von einem anderen Prozess A. dump Ich tue dies, weil MSDN sagte so:Gibt es eine Möglichkeit, die Thread-ID in einem anderen Prozess zu kennen, der eine Ausnahme auslöst?
MiniDumpWriteDump sollte von einem separaten Prozess, wenn überhaupt aufgerufen werden möglich, anstatt von innerhalb des Zielprozesses gedumpt werden.
Die MiniDumpWriteDump() als das definiert:
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
);
Insbesondere die ExceptionParam ist vom Typ PMINIDUMP_EXCEPTION_INFORMATION, die wie unten definiert ist:
typedef struct _MINIDUMP_EXCEPTION_INFORMATION {
DWORD ThreadId;
PEXCEPTION_POINTERS ExceptionPointers;
BOOL ClientPointers;
} MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;
Jetzt frage ich bin wie die folgenden 2 Parameter vorbereitet werden:
ThreadId Der Bezeichner des Threads, der die Ausnahme auslöst.
ExceptionPointers Ein Zeiger auf eine Struktur, die eine EXCEPTION_POINTERS rechnerunabhängige Beschreibung der Ausnahme und der Prozessorkontext zum Zeitpunkt der Ausnahme angibt.
Wie konnte ich die fehlerhaften Thread-ID- und Ausnahmezeiger in Prozess B erhalten, während ich in Prozess A lief?
Danke.
Ich stehe vor einem ähnlichen Problem. Ich bin nicht in der Lage, PEXCEPTION_POINTERS ExceptionPointers an andere Prozesse zu übergeben. (Wenn ich das FileMapping-Konzept verwende, bekomme ich einen Nullzeiger). Bitte erläutern Sie, wie Sie sich auf diesen Punkt festgelegt haben. –