Qt Breakpad 结果

Qt Breakpad results

我正在关注此 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 顺便说一句

Windows 上的调试实践的答案是通用的。当您 compile/link 您的项目时,Microsoft Visual C++ 构建工具会生成 Program Database File 格式的输出。然后当程序崩溃时,您会得到 .dmp 或小型转储文件,您可以使用特定的函数名称/行展开堆栈。

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

更新:我们也可以 'symbolicate' 'empty' 没有名字的转储如回答:stackwalker loads all symbol files, but still doesn't symbolicate anything. I guess that the tool name is minidump_stackwalk.