跟踪点,但跟踪操作无法正常工作。 在下面的gdb侧的最后一个显示跟踪点被跟踪。 但“收集$ regs”无法按预期工作。
我的平台是RH6.4。
1. gdbserver side。
gdbserver :10000 ./a.out
Process ./a.out created; pid = 10466
Listening on port 10000
Remote debugging from host 127.0.0.1
2。 gdb方。
gdb a.out
(gdb) target remote :10000
Remote debugging using :10000
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
0x00000033b7000b00 in _start () from /lib64/ld-linux-x86-64.so.2
Created trace state variable $trace_timestamp for target's variable 1.
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.107.el6.x86_64
(gdb) trace main
Tracepoint 1 at 0x400541: file a.c, line 12.
(gdb) actions 1
collect $regs
end
(gdb) tstart
(gdb) break 15
Breakpoint 2 at 0x40055f: file a.c, line 15.
Breakpoint 2, main (argc=1, argv=0x7fffca819f08) at a.c:18
18 sleep (1);
(gdb) cont
Continuing.
(gdb) tstop
(gdb) tfind
Found trace frame 0, tracepoint 1
12 c = 2;
答案 0 :(得分:1)
我想您希望tracepoint在源文件的实际main
声明行中,我错了吗?
重要的一点是,它被放置在函数的入口点,实际上,这是第一个函数的代码行,查看您提供的信息,它应该是c = 2;
另一方面,这只是一个愚蠢的细节,请注意你在第15行没有代码,断点已在第18行设置。
编辑:
根据您的评论,您希望tfind
转储所有收集的寄存器,但您需要额外的步骤:通过使用tfind
而没有参数您选择了下一个跟踪点(在这种情况下是第一个)并且,要转储此跟踪点的操作收集信息,您应该调用tdump