c++ - 我可以从这个回溯中找到导致崩溃的代码行吗?

标签 c++ qt debugging visual-studio-2017 backtrace

我有这样的回溯,而且我有 xswiftbus 的源代码。有没有办法找出“数字”属于哪个代码线?

所以我可以从中找出我的调用堆栈。 在 QtC 或 VS2017 中。

我个人无法重现导致此回溯的崩溃,但也许我至少可以看到涉及哪些函数。

Backtrace is:
0 00007FF8EE00BE1B E:\X-Plane 11\Resources\plugins\xswiftbus\64\win.xpl+000000000000BE1B ()
1 00007FF8EE028D1D E:\X-Plane 11\Resources\plugins\xswiftbus\64\win.xpl+0000000000028D1D ()
2 00007FF8EE00A64D E:\X-Plane 11\Resources\plugins\xswiftbus\64\win.xpl+000000000000A64D ()
3 00007FF8EE028B19 E:\X-Plane 11\Resources\plugins\xswiftbus\64\win.xpl+0000000000028B19 ()
4 00007FF8EE00F025 E:\X-Plane 11\Resources\plugins\xswiftbus\64\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 ()

最佳答案

  1. 下载并安装WinDbg .

  2. 获取与版本匹配的 XPL 文件(如果可能,例如下载该版本)并将其重命名为 DLL。

  3. 选择“开始调试”,然后选择“打开转储文件”,即使您没有转储文件也是如此。

  4. 选择重命名的DLL文件

  5. 输入 .symopt +40为了允许加载与二进制文件不匹配的符号。

  6. 输入 .symfix获取微软符号

  7. 输入 .sympath+ <path to your PDB>

  8. 输入 ln <address>

这应该给出类似的输出

0:000> ln 10009a9d
(10009a90)   MNbasic!str_encode_num_str+0xd   |  (10009b80)   MNbasic!str_alpha_num_code

因此,您现在拥有一个方法名称和一个偏移量,而不仅仅是一个偏移量。如果偏移量仍然很大,则符号可能偏离得太远。

关于c++ - 我可以从这个回溯中找到导致崩溃的代码行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57690365/

相关文章:

C++检查带有零和空值的数组的长度

c++ - 返回类型可以混合吗?或解决方法

.net - Debug build 在调试和不调试的情况下运行有什么不同?

c# - 当我更改表单数据网格的排序顺序时,在 form.ShowDialog() 上发生参数异常

c++ - 使用 BOOST_FOREACH 遍历目录中的所有文件

c++ - Scons 没有按照我指定的那样计算正确的 'ParseDepends' 或 'Ignore'

c++ - 如何在对象创建时从 QML 调用任意 C++ 函数?

c++ - Qt 创建的应用程序在没有 Qt creator 的情况下无法运行

c++ - 如何以及在何处使用带有 QT 的 basler 相机实现 opencv 人脸检测代码

model-view-controller - 如何调试Uploadify?