gpt4 book ai didi

gdb - 如何解释回溯地址以使用 GDB 进行调试

转载 作者:行者123 更新时间:2023-12-04 14:32:34 25 4
gpt4 key购买 nike

我正在使用 backtrace() 和 backtrace_symbols() 以如下格式输出 SIGSEGV 和其他信号的回溯:

0: [0xb750818]
1: /opt/server/libQtScript.so.4(+0x6f42a) [0xb782c42a]
2: /opt/server/libQtScript.so.4(+0x7bffc) [0xb7838ffc]
3: /opt/server/libQtScript.so.4(+0x86946) [0xb7843946]
4: /opt/server/libQtScript.so.4(+0x7c4bc) [0xb78394bc]
5: /opt/server/libQtScript.so.4(+0x86946) [0xb7843946]
6: /opt/server/libQtScript.so.4(+0x9603e) [0xb785303e]
7: /opt/server/libQtScript.so.4(_ZN12QScriptValue4callERKS_RK5QListIS_E+0x2e7) [0xb7891647]

在这种特殊情况下,第 7 帧对我来说很好,尽管第 1-6 帧给了我一些“+x”地址。

如何在反汇编中为“+0x6f42a”和 GDB 中的其他地址获取准确的行?什么框架#0,没有描述的模块,是什么意思?

最佳答案

How to get exact line in disassemble for "+0x6f42a" and other addresses in GDB?


gdb /opt/server/libQtScript.so.4
(gdb) x/10i 0x6f42a

通常你会想要在 0x6f42a 之前执行的指令,所以你会这样做:
(gdb) x/20i 0x6f42a-30

忽略前几条指令:您可能从一个中间开始反汇编。通常反汇编会在几条指令后重新同步,然后开始显示正确的指令流。

And what frame #0, without described module, means?



您的库已删除符号,因此您看到的唯一符号(例如 _ZN12QScriptValue4callERKS_RK5QListIS_E )是外部可见(也称为导出)的符号。

There are libQtScript.so.4.5.2.debug symbol file in QT_SOURCE/lib folder. So maybe I should copy .debug file near executable to get backtrace with full symbols?



GDB 应该从 libQtScript.so.4.5.2.debug 加载符​​号如果您设置 debug-file-directory 则自动至 $QT_SOURCE/lib .

更新:

I ment getting backtrace with symbols without attaching GDB



我不相信 backtace_symbols() 有任何支持用于加载单独的调试信息文件。

关于gdb - 如何解释回溯地址以使用 GDB 进行调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10089946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com