GDB 跟踪:加载的跟踪文件无法正确显示帧

问题描述 投票:0回答:1

我已成功在远程调试会话中使用 GDB 跟踪点获取跟踪,如 thisthis other 问题中所述。我能够正确地看到框架,以及参数、局部变量等。然后,我将跟踪导出到跟踪文件(

tsave
命令)以进行进一步的离线分析,如下所示:

gdb -q trace_test
Reading symbols from trace_test...

(gdb) target remote :1234
(gdb) trace 3
Tracepoint 1 at 0x555555555157: file /home/juangburgos/Documents/REPOS/trace_test/main.cpp, line 3.
(gdb) trace 8
Tracepoint 2 at 0x555555555184: file /home/juangburgos/Documents/REPOS/trace_test/main.cpp, line 8.
(gdb) b 9
Breakpoint 3 at 0x55555555519a: file /home/juangburgos/Documents/REPOS/trace_test/main.cpp, line 9.
(gdb) actions 1
Enter actions for tracepoint 1, one per line.
End with a line saying just "end".
>collect $regs,$args,$locals,$_ret,$trace_timestamp
>end
(gdb) tstart
(gdb) c
Continuing.
Breakpoint 3, main () at /home/juangburgos/Documents/REPOS/trace_test/main.cpp:9
9       return 0;
(gdb) tstop
(gdb) tfind start
Found trace frame 0, tracepoint 1
#0  foo (a=33, b=4) at /home/juangburgos/Documents/REPOS/trace_test/main.cpp:3
3       return a + b + b;
(gdb) tsave /home/juangburgos/Documents/REPOS/build-trace_test-Desktop-Debug/trace02.tfile
Trace data saved to file '/home/juangburgos/Documents/REPOS/build-trace_test-Desktop-Debug/trace02.tfile'.
(gdb) q

现在的问题是,当我在另一个离线GDB会话中加载跟踪文件时,框架、参数、局部变量不会显示,只显示

??
:

gdb -q trace_test

Reading symbols from trace_test...
(gdb) target tfile /home/juangburgos/Documents/REPOS/build-trace_test-Desktop-Debug/trace02.tfile
Tracepoint 1 at 0x1157: file /home/juangburgos/Documents/REPOS/trace_test/main.cpp, line 3.
Created tracepoint 1 for target's tracepoint 1 at 0x555555555157.
Tracepoint 2 at 0x1184: file /home/juangburgos/Documents/REPOS/trace_test/main.cpp, line 8.
Created tracepoint 2 for target's tracepoint 2 at 0x555555555184.
(gdb) tfind start
Found trace frame 0, tracepoint 1
#0  0x0000555555555157 in ?? ()

有人知道是什么原因造成的吗?我知道它应该可以工作,因为这是跟踪文件的定义用例。

gdb trace
1个回答
0
投票

注意GDB输出的这部分消息:

Tracepoint 1 at 0x1157: file ... Created tracepoint 1 for target's tracepoint 1 at 0x555555555157.

GDB 似乎无法将跟踪文件 (

0x555555555157
) 中的内存偏移量转换为加载图像的内存偏移量 (
0x1157
)。

尝试使用与观察到的差异相匹配的偏移量加载符号。 IE。

0x555555555157 - 0x1157 = 0x555555554000
,然后执行:

add-symbol-file ./trace_test -o 0x555555554000

并再次尝试

tfind start

© www.soinside.com 2019 - 2024. All rights reserved.