我想使用跟踪点在我有完全访问权限的本地计算机上调试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使用吗?或者是用于调试局域网或其他网络上的某些远程机器? 任何帮助将不胜感激。
感谢 维卡斯
答案 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