gdb tracepoint的操作不起作用

时间:2013-11-19 09:08:01

标签: c++ c linux gcc gdb

可以跟踪

跟踪点,但跟踪操作无法正常工作。 在下面的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;

1 个答案:

答案 0 :(得分:1)

我想您希望tracepoint在源文件的实际main声明行中,我错了吗?

重要的一点是,它被放置在函数的入口点,实际上,这是第一个函数的代码行,查看您提供的信息,它应该是c = 2;

另一方面,这只是一个愚蠢的细节,请注意你在第15行没有代码,断点已在第18行设置。

编辑:

根据您的评论,您希望tfind转储所有收集的寄存器,但您需要额外的步骤:通过使用tfind而没有参数您选择了下一个跟踪点(在这种情况下是第一个)并且,要转储此跟踪点的操作收集信息,您应该调用tdump