【发布时间】:2018-07-05 20:50:11
【问题描述】:
我有一个崩溃进程的gdb 回溯,但我看不到发生崩溃的具体行,因为源代码不在那个时刻。 我不明白提到的回溯给出的一些信息。
回溯由如下几行组成:
<path_to_binary_file>(_Z12someFunction+0x18)[0x804a378]
注意_Z12someFunction 是int someFunction(double ) 的错名。
我的问题是:
+0x18 是否表示从_Z12someFunction 地址开始的产生崩溃的汇编指令的偏移量?
如果前面的问题是肯定的,并且考虑到我正在使用 32 位架构,+0x18 是否表示 0x18 * 4 字节?
如果以上是肯定的,我假设地址0x804a378是_Z12someFunction加上0x18,对吗?
编辑:
错误发生在生产机器(未启用内核)中,并且似乎是与时间相关的错误,因此不容易重现。那是因为我所要求的信息在这个场合对我很重要。
【问题讨论】:
-
只需构建带有调试信息的二进制文件
-
除了偏移量是字节而不是 32 位字之外,你什么都对。
-
我们能看到你的编译命令吗?我怀疑你是用太低的调试模式构建的。
-
是的,编译是经过优化且没有调试符号的,但我无法仅使用调试信息进行编译来解决我的问题,因为我无法轻松重现错误。
-
但这不是gdb回溯,它是glibc backtrace。
标签: c++ debugging gdb reverse-engineering disassembly