我可以从这个回溯中找到导致崩溃的代码行吗?
Can I find the codeline causing the crash from this backtrace?
我有这样的回溯,而且我有 xswiftbus
的源代码。有没有办法找出 "numbers" 属于哪个代码行?
所以我可以从中找出我的调用堆栈吗?
在 QtC 或 VS2017 中。
我个人无法重现导致此回溯的崩溃,但也许我至少可以看到涉及哪些函数。
Backtrace is:
0 00007FF8EE00BE1B E:\X-Plane 11\Resources\plugins\xswiftbus\win.xpl+000000000000BE1B ()
1 00007FF8EE028D1D E:\X-Plane 11\Resources\plugins\xswiftbus\win.xpl+0000000000028D1D ()
2 00007FF8EE00A64D E:\X-Plane 11\Resources\plugins\xswiftbus\win.xpl+000000000000A64D ()
3 00007FF8EE028B19 E:\X-Plane 11\Resources\plugins\xswiftbus\win.xpl+0000000000028B19 ()
4 00007FF8EE00F025 E:\X-Plane 11\Resources\plugins\xswiftbus\win.xpl+000000000000F025 ()
5 00007FF9084E5202 E:\X-Plane 11\Resources\plugins\XPLM_64.dll+0000000000015202 ()
6 00007FF9084DB362 E:\X-Plane 11\Resources\plugins\XPLM_64.dll+000000000000B362 ()
7 00007FF7802156CA E:\X-Plane 11\X-Plane.exe+0000000000A456CA ()
8 00007FF77F8AA69E E:\X-Plane 11\X-Plane.exe+00000000000DA69E ()
下载并安装WinDbg。
获取与版本匹配的 XPL 文件(如果可能,例如下载该版本)并将其重命名为 DLL。
选择 "Start debugging",然后选择 "open dump file",即使您没有转储文件。
Select重命名的DLL文件
键入 .symopt +40
以允许加载与二进制文件不匹配的符号。
键入 .symfix
以获取 Microsoft 符号
类型.sympath+ <path to your PDB>
类型ln <address>
这应该会产生类似
的输出
0:000> ln 10009a9d
(10009a90) MNbasic!str_encode_num_str+0xd | (10009b80) MNbasic!str_alpha_num_code
因此,您现在拥有方法名称和偏移量,而不仅仅是偏移量。如果偏移量仍然很大,可能是符号偏离太远。
我有这样的回溯,而且我有 xswiftbus
的源代码。有没有办法找出 "numbers" 属于哪个代码行?
所以我可以从中找出我的调用堆栈吗? 在 QtC 或 VS2017 中。
我个人无法重现导致此回溯的崩溃,但也许我至少可以看到涉及哪些函数。
Backtrace is:
0 00007FF8EE00BE1B E:\X-Plane 11\Resources\plugins\xswiftbus\win.xpl+000000000000BE1B ()
1 00007FF8EE028D1D E:\X-Plane 11\Resources\plugins\xswiftbus\win.xpl+0000000000028D1D ()
2 00007FF8EE00A64D E:\X-Plane 11\Resources\plugins\xswiftbus\win.xpl+000000000000A64D ()
3 00007FF8EE028B19 E:\X-Plane 11\Resources\plugins\xswiftbus\win.xpl+0000000000028B19 ()
4 00007FF8EE00F025 E:\X-Plane 11\Resources\plugins\xswiftbus\win.xpl+000000000000F025 ()
5 00007FF9084E5202 E:\X-Plane 11\Resources\plugins\XPLM_64.dll+0000000000015202 ()
6 00007FF9084DB362 E:\X-Plane 11\Resources\plugins\XPLM_64.dll+000000000000B362 ()
7 00007FF7802156CA E:\X-Plane 11\X-Plane.exe+0000000000A456CA ()
8 00007FF77F8AA69E E:\X-Plane 11\X-Plane.exe+00000000000DA69E ()
下载并安装WinDbg。
获取与版本匹配的 XPL 文件(如果可能,例如下载该版本)并将其重命名为 DLL。
选择 "Start debugging",然后选择 "open dump file",即使您没有转储文件。
Select重命名的DLL文件
键入
.symopt +40
以允许加载与二进制文件不匹配的符号。键入
.symfix
以获取 Microsoft 符号类型
.sympath+ <path to your PDB>
类型
ln <address>
这应该会产生类似
的输出0:000> ln 10009a9d
(10009a90) MNbasic!str_encode_num_str+0xd | (10009b80) MNbasic!str_alpha_num_code
因此,您现在拥有方法名称和偏移量,而不仅仅是偏移量。如果偏移量仍然很大,可能是符号偏离太远。