可以跟踪跟踪点,但跟踪操作不能正常工作。在gdb的最后,下面显示了跟踪点被跟踪。但"收取$regs"并没有如预期的那样起作用。
我的平台是RH6.4
1.gdbserver侧。
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;
我想您希望跟踪点在源文件的实际main
声明行中,我错了吗?
重要的是,它被放在函数的入口点,实际上,这是第一个函数的代码行,根据您提供的信息,它应该是c = 2;
另一方面,这只是一个愚蠢的细节,请注意,您在第15行没有代码,并且在第18行设置了断点。
编辑:
根据您的评论,您希望tfind
转储所有收集的寄存器,但您需要额外的步骤:通过在没有参数的情况下使用tfind
,您选择了下一个跟踪点(本例中为第一个),并且,要转储此跟踪点的操作收集信息,您应该调用tdump