我可能做错了什么,但我无法弄清楚这一点。
我有一个在 Windows 上生成的简单崩溃小型转储。如果我在 Visual Studio 中打开转储,它会毫无问题地加载并显示崩溃线。但我无法让它在 minidump_stackwalker 中进行符号化。
我确实创建了一个符号存储库文件夹,里面有:symbols/myapplication.pdb/67892B042C8F4CCFAA6BE53445F9B2141/myapplication.sym 以及应用程序使用的所有:symbols/wkernel32.pdb/XXXXXX/wkernel32.sym 等。
当我调用“minidump_stackwalk mycrash.dmp 符号”时,stderr 显示 simple_symbol_supplier 正确找到所有符号并加载它们。但是,输出一直是堆栈,其中没有任何符号。
我还尝试在 linux 和 MacOSX 上编译并运行 minidump_stackwalk,但结果是一样的。
我究竟做错了什么?
stackwalk 的 stderr 输出如下所示:
2014-05-08 16:44:48: minidump_processor.cc:235: INFO: Processing minidump in file 604c29d0-318a-4321-9e40-b0198085c17d.dmp
2014-05-08 16:44:48: minidump.cc:3258: INFO: Minidump opened minidump 604c29d0-318a-4321-9e40-b0198085c17d.dmp on fd 3
2014-05-08 16:44:48: minidump.cc:3303: INFO: Minidump not byte-swapping minidump
2014-05-08 16:44:48: minidump.cc:1726: ERROR: MinidumpModule could not determine debug_file for C:\Windows\winsxs\x86_microsoft.vc90.mfcloc_1fc8b3b9a1e18e3b_9.0.30729.6161_none_49768ef57548175e\MFC90ENU.DLL
2014-05-08 16:44:48: minidump.cc:1794: ERROR: MinidumpModule could not determine debug_identifier for C:\Windows\winsxs\x86_microsoft.vc90.mfcloc_1fc8b3b9a1e18e3b_9.0.30729.6161_none_49768ef57548175e\MFC90ENU.DLL
2014-05-08 16:44:48: minidump_processor.cc:103: INFO: Minidump 604c29d0-318a-4321-9e40-b0198085c17d.dmp has CPU info, OS info, Breakpad info, exception, module list, thread list, dump thread, and requesting thread
2014-05-08 16:44:48: minidump_processor.cc:137: INFO: Looking at thread 604c29d0-318a-4321-9e40-b0198085c17d.dmp:0/24 id 0x1570
2014-05-08 16:44:49: basic_source_line_resolver.cc:223: INFO: Loading symbols for module C:\Program Files\MyApplication\myapplication.exe from buffer
2014-05-08 16:44:49: basic_source_line_resolver.cc:223: INFO: Loading symbols for module C:\Windows\System32\user32.dll from buffer
2014-05-08 16:44:49: basic_source_line_resolver.cc:223: INFO: Loading symbols for module C:\Windows\System32\kernel32.dll from buffer
2014-05-08 16:44:49: basic_source_line_resolver.cc:223: INFO: Loading symbols for module C:\Windows\System32\ntdll.dll from buffer
2014-05-08 16:44:49: minidump_processor.cc:137: INFO: Looking at thread 604c29d0-318a-4321-9e40-b0198085c17d.dmp:1/24 id 0xbb4
...
2014-05-08 16:44:49: minidump_processor.cc:229: INFO: Processed 604c29d0-318a-4321-9e40-b0198085c17d.dmp
2014-05-08 16:44:49: minidump.cc:3232: INFO: Minidump closing minidump on fd 3
输出如下所示:
Operating system: Windows NT
6.1.7601 Service Pack 1
CPU: x86
GenuineIntel family 6 model 15 stepping 6
2 CPUs
Crash reason: EXCEPTION_ACCESS_VIOLATION
Crash address: 0x0
Thread 0 (crashed)
0 myapplication.exe + 0x6d0aa7
eip = 0x01500aa7 esp = 0x0023eef4 ebp = 0x0023eefc ebx = 0x0505f9bc
esi = 0x0505f9bc edi = 0x00000000 eax = 0x0514fe33 ecx = 0x0003c11d
edx = 0x00000003 efl = 0x00010202
Found by: given as instruction pointer in context
1 myapplication.exe + 0x146fb
eip = 0x00e446fc esp = 0x0023ef04 ebp = 0x0023ef20
Found by: previous frame's frame pointer
2 myapplication.exe + 0x127b1
eip = 0x00e427b2 esp = 0x0023ef28 ebp = 0x0023ef4c
Found by: previous frame's frame pointer
...