我想使用跟踪点在我拥有完全访问权限的本地计算机上调试一个程序。我可以设置跟踪点及其通行数,并使用info tr为我提供
(gdb)信息树
Num Enb Address PassC StepC什么
1 y 0x080b7529 2 0,位于tcp_pkt.c:412的search_tcp中
跟踪点1的操作:收集流结束
然后我运行这个程序,它像往常一样运行,最后当我给tfind或tdump来收集它显示的所需数据时:
(gdb) tfind 1
跟踪只能在远程目标上运行。
(gdb) tdump
跟踪只能在远程目标上运行。
甚至我也尝试过使用"tstart“,但它再次显示”跟踪只能在远程目标上运行“。
你知道这条消息的意思是什么吗?当前是否不支持跟踪循环使用?或者是用于调试局域网或其他网络上的远程机器?任何帮助都将不胜感激。
谢谢维卡斯
发布于 2012-02-02 00:10:17
知道这条消息的意思是什么吗?
这就是消息所说的意思: tracepoint工具只在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
“的位置,我的程序将其作为输入
很简单。您可以阅读gdbserver的documentation,但我相信您正在寻找这个调用:
gdbserver :10000 ./a.out -f filenamehttps://stackoverflow.com/questions/9096321
复制相似问题