Информация стека исчезает, когда я добавляю информацию об исключении в мой мини-дамп

Я пишу мини-дамп вне процесса для дочернего процесса. Вот соответствующий фрагмент кода:

CONTEXT thread_context{};
thread_context.ContextFlags = CONTEXT_FULL;
assert(GetThreadContext(child_thread_handle, &thread_context));

EXCEPTION_POINTERS exception_ptrs;
exception_ptrs.ExceptionRecord = &exception_info.ExceptionRecord;
exception_ptrs.ContextRecord = &thread_context;

MINIDUMP_EXCEPTION_INFORMATION minidump_exception_info;
minidump_exception_info.ThreadId = evt.dwThreadId;
minidump_exception_info.ExceptionPointers = &exception_ptrs;
minidump_exception_info.ClientPointers = FALSE;
auto success = MiniDumpWriteDump(child_handle, evt.dwProcessId, file_handle, minidump_flags, &minidump_exception_info, nullptr, nullptr);

Это дает мне информацию об исключении и стек вызовов для каждого потока Кроме нить, которая вызвала исключение. Если я изменю &minidump_exception_info для nullptr я получаю стек вызовов, но нет информации об исключениях. Есть ли способ получить информацию об исключениях и стек вызовов?

2

Решение

Вызов GetThreadContext с CONTEXT_FULL не захватывает все регистры, необходимые для получения трассировки стека, а наличие контекста не позволяет отладчику использовать другую информацию для получения стека вызовов. Использование CONTEXT_ALL вместо этого дает достаточно информации для воссоздания стека вызовов.

https://msdn.microsoft.com/en-us/magazine/hh580738.aspx была полезной ссылкой в ​​выяснении этого.

1

Другие решения


По вопросам рекламы [email protected]