Tracepoint无法在gdb中运行,并显示“Trace只能在远程目标上运行”

时间:2012-02-01 13:06:47

标签: gdb

我想使用跟踪点在我有完全访问权限的本地计算机上调试prog。我能够设置tracepoint及其passcount并使用info tr给我

(gdb)info tr

Num Enb地址PassC StepC什么

1 y 0x080b7529 2 0在search_tcp at tcp_pkt.c:412

跟踪点1的操作:         收集流量         端

然后我运行prog,它像往常一样运行,最后当我给tfind或tdump收集它显示的所需数据时:

(gdb)tfind 1

跟踪只能在远程目标上运行。

(gdb)tdump

跟踪只能在远程目标上运行。

即使我尝试使用“tstart”,但它再次显示“Trace只能在远程目标上运行。”

知道这条消息的含义是什么?目前不支持tracepoing使用吗?或者是用于调试局域网或其他网络上的某些远程机器? 任何帮助将不胜感激。

感谢 维卡斯

1 个答案:

答案 0 :(得分:11)

  

知道这条消息是什么意思吗?

意思是完全消息所说的内容:跟踪点工具仅在gdbserver中实现 ,而不是在GDB本身中实现,所以你不能在本机调试时使用tstart(当GDB直接控制下级(被调试)进程时)。

相反,您需要设置一个远程调试会话(仍然可以在一台计算机上完成):

gdbserver :10000 ./a.out  # start gdbserver listening on port 10000

在另一个窗口中:

gdb -ex 'target remote :10000' ./a.out

现在你将拥有一个带有远程目标的GDB(在同一主机上运行的gdbserver),并且tstart等将起作用。

更新

  

但现在我看到以下信息:
  (gdb) tstart
  Target does not support this command.
  (gdb) r
  The "remote" target does not support "run".

在使用tstart之前,您需要设置跟踪和操作,如文档here所述。

你不能run,因为劣质过程已经正在运行。请改用continue

更新2:

(gdb) trace testprog.c:273
Tracepoint 1 at 0x4578f7: file testprog.c, line 273.
(gdb) passcount 2 1
Setting tracepoint 1's passcount to 2
(gdb) actions 1
Enter actions for tracepoint 1, one per line.
End with a line saying just "end".
> collect id1
> end
(gdb) tstart
Target does not support this command

听起来您的gdbserver已经过时了,事实上支持跟踪。

做什么

gdb --version
gdbserver --version

产生

更新3:

显然,您的gdbserver 太旧了。

即使GDB本身支持自4.17版以来的跟踪点,gdbserver仅开始支持版本7.2的跟踪点

更新4:

  

在哪里给这个选项“-f filename”我的程序作为输入

简单。您可以阅读gdbserver的documentation,但我相信您正在寻找此调用:

gdbserver :10000 ./a.out -f filename