簡體   English   中英

Qt應用程序和Google Breakpad

[英]Qt application and 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. 在out.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

我最近也到過同樣的兔子洞。 從許多地方獲取資源,我將在此倉庫中找到的所有內容匯總在一起。

可能會影響堆棧輸出的一件事是,如果您正在使用優化級別來編譯應用程序。 是否強制創建調試符號都沒有關系。 如果應用任何優化,則堆棧有時會顯示為不正確,因此您可以嘗試在Qt項目( *.pro文件)中為發布版本禁用優化,如下所示:

CONFIG *= force_debug_info
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO -= -O2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM