跟踪点在gdb中不工作,它显示;跟踪只能在远程目标上运行”;

跟踪点在gdb中不工作,它显示;跟踪只能在远程目标上运行”;,gdb,Gdb,我想使用跟踪点在我有完全访问权的本地机器上调试程序。我能够设置跟踪点及其密码,并使用tr提供的信息 (gdb)信息tr Num Enb地址PassC StepC什么 1 y 0x080b7529 2 0位于tcp地址的搜索\u tcp中。c:412 跟踪点1的操作: 集流 结束 然后我运行程序,它像往常一样运行,最后我给tfind或tdump以收集所需的数据,它显示: (gdb)tfind 1 跟踪只能在远程目标上运行 (gdb)tdump 跟踪只能在远程目标上运行 甚至我也尝试使用“tstar

我想使用跟踪点在我有完全访问权的本地机器上调试程序。我能够设置跟踪点及其密码,并使用tr提供的信息

(gdb)信息tr

Num Enb地址PassC StepC什么

1 y 0x080b7529 2 0位于tcp地址的搜索\u tcp中。c:412

跟踪点1的操作: 集流 结束

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

(gdb)tfind 1

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

(gdb)tdump

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

甚至我也尝试使用“tstart”,但它再次显示“跟踪只能在远程目标上运行”

你知道这条消息的意思吗?当前是否不支持跟踪使用?或者是为了通过局域网或其他网络调试远程机器? 任何帮助都将不胜感激

谢谢 维卡斯

你知道这条消息的意思吗

其含义正是消息所说的:tracepoint工具仅在
gdbserver
中实现,而不是在GDB本身中实现,因此在本机调试时(当GDB直接控制下级(正在调试的)进程时),不能使用
tstart

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

在另一个窗口中:

gdb -ex 'target remote :10000' ./a.out
现在,您将拥有一个远程目标的GDB(即运行在同一主机上的
gdbserver
),并且
tstart
等将起作用

更新:

但现在我看到了以下消息:
(gdb)tstart

目标不支持此命令。

(gdb)r

远程目标不支持“运行”。

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

您无法运行,因为低级进程已经在运行。使用
继续

更新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的调用,但我相信您正在寻找以下调用:

gdbserver :10000 ./a.out -f filename

您好…非常感谢您的回复..我遵循了您上面写的内容,即在一个终端上运行gdbserver,并在同一主机上的另一个终端上运行上面写的gdb cmd。现在我不再收到“跟踪只能在远程目标上运行”的消息。但现在我看到以下消息:(gdb)tstart目标不支持此命令。(gdb)r“远程”目标不支持“运行”。尝试“帮助目标”或“继续”。我的gdb版本也是7.0。你知道是什么问题吗?我的gdb不支持它吗?请让我知道。在我做的一个终端上:gdbserver:10000./testprog进程。/testprog创建;pid=31543侦听来自主机127.0.0.1的端口10000远程调试和其他终端:gdb-ex“target Remote:10000”。/testprog(gdb)跟踪testprog.c:273跟踪点1,0x4578f7:file testprog.c,第273行。(gdb)passcount 2 1将跟踪点1的passcount设置为2(gdb)操作1为跟踪点1输入操作,每行一个。以一句话结束,只说“结束”。>收集ID1>结束(GDB)TSTART目标不支持这个命令。请让我知道这个问题。非常感谢所有的帮助。$GDB——版本GNU-GDB(GDB)7.0 UBUTU$GDBServer——版本GNU GDBServer(GDB)7.0 UBUTU版权(C)2009免费软件基金会,GDPServer是免费软件,由GNU通用公共许可证涵盖。此gdbserver配置为“i486 linux GNU”您能告诉我版本是否是真正的问题吗?还有其他原因吗?如果是版本问题,安装哪个版本可以解决问题。再次非常感谢你的帮助。你的回答很有启发性。嗨,“雇佣俄罗斯人”,很抱歉再次打扰你…你能告诉我这个问题吗?我想在你的帮助下,我可能很快就能成功使用追踪点了。请让我知道。谢谢…谢谢“雇佣俄语”,我现在已经安装了7.3版本,它解决了这个问题。但我仍然面临一个困难,我的程序需要一个文件作为输入。在通常的调试场景中,我先执行“gdb./prog\u name”,然后执行“r-f./inputfile\u name”,这样就可以了。现在,我无法获得如何为我的输入文件指定此选项,即'-f./inputfile\u name'。另外,请让我知道应该为哪个终端(gdbserver或gdb)提供此选项。再次感谢到目前为止所有的帮助和您快速及时的回复。
gdbserver :10000 ./a.out -f filename