Приложение Qt и Google Breakpad

В настоящее время я работаю с приложением, пытающимся интегрировать BreakPad в приложение Qt. Я нашел страницу, которая помогла мне с первоначальной настройкой и причудами.

https://github.com/JPNaude/dev_notes/wiki/Using-Google-Breakpad-with-Qt

Я до сих пор не могу заставить его работать за реальные исключения. Я создал демонстрационное приложение, и у него возникла та же проблема. Вот шаги, которые я следую, чтобы проверить. Я сейчас тестирую в отладке.

  1. Сборка приложения Запустите dump_syms.exe BreakpadTest.pdb> BreakpadTest.sym
  2. Запустите приложение и создайте файл дампа
  3. Запустите символы minidump_stackwalk dumpfile.dmp> out.txt 2>&1
  4. Проверьте.txt для пути к файлу для размещения BreakpadTest.sym
  5. Переместите файл BreakpadTest.sym в нужное место
  6. Запустите символы minidump_stackwalk dumpfile.dmp> out.txt 2>&1 снова

Это оставляет меня с файлом out.txt.

Когда я вызываю dumpFunc в моем демонстрационном приложении, которое выполняет этот код

Breakpad::CrashHandler::instance()->writeMinidump();

Я получаю следующий вывод

Thread 0 (crashed)
0  BreakpadTest.exe!Breakpad::CrashHandler::writeMinidump() [crashhandler.cpp : 118 + 0xb]
eip = 0x00c03a44   esp = 0x00affe18   ebp = 0x00affe48   ebx = 0x009fe000
esi = 0x00c01960   edi = 0x00c01960   eax = 0x00affaf0   ecx = 0x00affaf0
edx = 0x00affdbc   efl = 0x00000216
Found by: given as instruction pointer in context
1  BreakpadTest.exe!dumpFunc() [main.cpp : 13 + 0xb]
eip = 0x00c0364f   esp = 0x00affe50   ebp = 0x00affe50
Found by: call frame info
2  BreakpadTest.exe!main [main.cpp : 25 + 0x4]
eip = 0x00c03746   esp = 0x00affe58   ebp = 0x00affea0
Found by: call frame info
3  BreakpadTest.exe!WinMain [qtmain_win.cpp : 113 + 0xc]
eip = 0x00c14d3d   esp = 0x00affea8   ebp = 0x00affed4
Found by: call frame info
4  BreakpadTest.exe!invoke_main [exe_common.inl : 94 + 0x1a]
eip = 0x00c13b7e   esp = 0x00affedc   ebp = 0x00affeec
Found by: call frame info
5  BreakpadTest.exe!__scrt_common_main_seh [exe_common.inl : 253 + 0x4]
eip = 0x00c13a00   esp = 0x00affef4   ebp = 0x00afff44
Found by: call frame info
6  BreakpadTest.exe!__scrt_common_main [exe_common.inl : 295 + 0x4]
eip = 0x00c1389d   esp = 0x00afff4c   ebp = 0x00afff4c
Found by: call frame info
7  BreakpadTest.exe!WinMainCRTStartup [exe_winmain.cpp : 16 + 0x4]
eip = 0x00c13b98   esp = 0x00afff54   ebp = 0x00afff54
Found by: call frame info
8  kernel32.dll + 0x162c3
eip = 0x76c962c4   esp = 0x00afff5c   ebp = 0x00afff68
Found by: call frame info
9  ntdll.dll + 0x60fd8
eip = 0x77850fd9   esp = 0x00afff70   ebp = 0x00afffb0
Found by: previous frame's frame pointer
10  ntdll.dll + 0x60fa3
eip = 0x77850fa4   esp = 0x00afffb8   ebp = 0x00afffc0
Found by: previous frame's frame pointer

Это хорошо и то, что я хочу. Но когда я на самом деле вызываю исключение с помощью badFunc ().

int *myNull = NULL;
*myNull = 42;

Я получаю следующий вывод

Thread 0 (crashed)
0  ntdll.dll + 0x6e5fc
eip = 0x7785e5fc   esp = 0x00eff09c   ebp = 0x00eff10c   ebx = 0x00000001
esi = 0x00000000   edi = 0x00000368   eax = 0x00000000   ecx = 0x6d278097
edx = 0x00000000   efl = 0x00000206
Found by: given as instruction pointer in context
1  KERNELBASE.dll + 0xcad51
eip = 0x74d7ad52   esp = 0x00eff114   ebp = 0x00eff120
Found by: previous frame's frame pointer
2  BreakpadTest.exe!google_breakpad::ExceptionHandler::WriteMinidumpOnHandlerThread(_EXCEPTION_POINTERS *,MDRawAssertionInfo *) [exception_handler.cc : 720 + 0x11]
eip = 0x009f72d0   esp = 0x00eff128   ebp = 0x00eff138
Found by: previous frame's frame pointer
3  BreakpadTest.exe!google_breakpad::ExceptionHandler::HandleException(_EXCEPTION_POINTERS *) [exception_handler.cc : 504 + 0xd]
eip = 0x009f6d71   esp = 0x00eff140   ebp = 0x00eff178
Found by: call frame info
4  KERNELBASE.dll + 0x15d411
eip = 0x74e0d412   esp = 0x00eff180   ebp = 0x00eff20c
Found by: call frame info
5  ntdll.dll + 0x9e0bc
eip = 0x7788e0bd   esp = 0x00eff214   ebp = 0x00effa10
Found by: previous frame's frame pointer
6  ntdll.dll + 0x60fa3
eip = 0x77850fa4   esp = 0x00effa18   ebp = 0x00effa20
Found by: previous frame's frame pointer

Это не фактическая трассировка стека, где произошло исключение. Любые идеи о том, что идет не так или как я могу изменить это, чтобы получить реальный стек?

Демо-приложение
http://s000.tinyupload.com/?file_id=26352983283926785193

3

Решение

Задача ещё не решена.

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

Других решений пока нет …

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