Qt Breakpad结果

时间:2016-04-21 04:09:19

标签: qt google-breakpad

我正在关注此url

的说明

我把它编译在我的代码上(Qt,windows,VS 2015) 我在调试模式下运行它,当它崩溃时我执行以下操作:

创建符号文件

dump_syms.exe ZendeskClient.exe > ZendeskClient.sym

使用dmp和符号文件生成一个文本文件(尝试每个文件)

minidump_stackwalk.exe filename.dmp symbols > ZendeskClient.txt 2>&1
minidump_stackwalk.exe filename.dmp ZendeskClient.sym > ZendeskClient1.txt 2>&1
minidump_stackwalk.exe filename.dmp ZendeskClient.sym symbols > ZendeskClient2.txt 2>&1

但我没有看到任何显示导致应用程序崩溃的原因。我在文中看到(600行)(它不是所有的信息,只是希望显示我想要展示的内容。其余的数据有点相同):

2016-04-20 21:00:32: minidump_processor.cc:264: INFO: Processing minidump in file C:\Users\adviner\c62072b9-3bf7-42b6-b6f2-28c3ccf9546f.dmp
2016-04-20 21:00:32: minidump.cc:3500: INFO: Minidump opened minidump C:\Users\adviner\c62072b9-3bf7-42b6-b6f2-28c3ccf9546f.dmp
2016-04-20 21:00:32: minidump.cc:3545: INFO: Minidump not byte-swapping minidump
2016-04-20 21:00:32: minidump.cc:3902: INFO: GetStream: type 1197932546 not present
2016-04-20 21:00:32: minidump.cc:1945: INFO: MinidumpModule could not determine version for C:\Projects\PersonalApps\Build\Windows\ZendeskClient\debug\ZendeskClient.exe
2016-04-20 21:00:32: minidump_processor.cc:116: INFO: Minidump C:\Users\adviner\c62072b9-3bf7-42b6-b6f2-28c3ccf9546f.dmp has CPU info, OS info, 

....

CPU: x86
     GenuineIntel family 6 model 78 stepping 3
     4 CPUs

Crash reason:  EXCEPTION_ACCESS_VIOLATION_READ
Crash address: 0xffffffffcdcdcddd

Thread 0 (crashed)
 0  ntdll.dll + 0x76bfc
    eip = 0x77bc6bfc   esp = 0x0018bb08   ebp = 0x0018bb78   ebx = 0x00000001
    esi = 0x00000000   edi = 0x000001fc   eax = 0x00000000   ecx = 0xcdcdcddd
    edx = 0x0018c570   efl = 0x00200202
    Found by: given as instruction pointer in context
 1  KERNELBASE.dll + 0xae131
    eip = 0x7795e132   esp = 0x0018bb80   ebp = 0x0018bb8c
    Found by: previous frame's frame pointer
 2  ZendeskClient.exe + 0xfcf3f
    eip = 0x002fcf40   esp = 0x0018bb94   ebp = 0x0018bba4
    Found by: previous frame's frame pointer
 3  ZendeskClient.exe + 0xfc9e7
    eip = 0x002fc9e8   esp = 0x0018bbac   ebp = 0x0018bbe4
    Found by: previous frame's frame pointer
 4  KERNELBASE.dll + 0x13f471
    eip = 0x779ef472   esp = 0x0018bbec   ebp = 0x0018bc74
    Found by: previous frame's frame pointer
 5  ntdll.dll + 0xa35ed
    eip = 0x77bf35ee   esp = 0x0018bc7c   ebp = 0x0018fb8c
    Found by: previous frame's frame pointer
 6  ntdll.dll + 0x65dad
    eip = 0x77bb5dae   esp = 0x0018fb94   ebp = 0x0018fb9c
    Found by: previous frame's frame pointer

...

Loaded modules:
0x00200000 - 0x003e9fff  ZendeskClient.exe  ???  (main)
0x00bf0000 - 0x00d62fff  ucrtbased.dll  10.0.10240.16384
0x02490000 - 0x024b2fff  WINMMBASE.dll  6.2.10586.0
0x02650000 - 0x0266cfff  qicnsd.dll  5.6.0.0
0x029d0000 - 0x02bc8fff  qwindowsd.dll  5.6.0.0
0x02d50000 - 0x02d68fff  qicod.dll  5.6.0.0
0x02d70000 - 0x02d85fff  qsvgd.dll  5.6.0.0
0x02d90000 - 0x02da4fff  qtgad.dll  5.6.0.0
0x02dd0000 - 0x02f0efff  dbghelp.dll  6.2.10586.0

我构建输出的方式有问题吗?我在windows btw

1 个答案:

答案 0 :(得分:0)

答案通常是在Windows上调试练习。编译/链接项目时,Microsoft Visual C ++构建工具会生成Program Database File格式输出。然后当程序崩溃时你会获得.dmp或minidump文件,你可以用特定的函数名称/行来展开堆栈。

如何进行具有转储文件的实际调试?您可以将此答案用作Wiki,以便使用dmp和pdb文件进行调试:Analyzing Crash dumps in Visual Studio。只需使用Visual Studio打开转储文件,然后指向程序数据库,然后指向源代码,您将看到崩溃时所有线程/堆栈的图片。

更新:我们还可以“标记”没有名称的“空”转储:stackwalker loads all symbol files, but still doesn't symbolicate anything。我猜工具名称是minidump_stackwalk