2016-04-21 110 views
2

进出口以下从这个urlQt的Breakpad导致

笔记我已经在我的代码编译(QT,窗户,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上

回答

0

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

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

更新:我们还可以'空'转储'象征'没有名称作为回答:stackwalker loads all symbol files, but still doesn't symbolicate anything。我想这个工具的名字是minidump_stackwalk

+0

谢谢。这是我需要看到的问题。你摇滚:) – adviner

+0

我们这样做,并回忆说有一种方法来产生更好的文字输出。添加了更新。 – AlexanderVX

+0

@AlexanderVX不幸的是,minidump_stackwalk仍然没有给我结果。事实上,我做错了我不能使用VS2015的地方。我完全陷在这里。我的问题完全如上所述。任何帮助,将不胜感激请。 –