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

mez*_*zda 4 gdb

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

(gdb)info tr

Num Enb地址PassC StepC什么

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

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

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

(gdb)tfind 1

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

(gdb)tdump

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

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

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

谢谢vikas

Emp*_*ian 11

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

其含义正是消息所说的:跟踪点工具gdbserverGDB本身中实现,而不是在GDB本身中实现,因此您无法tstart在本机调试时使用(当GDB直接控制较差(正在调试)的过程时).

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

gdbserver :10000 ./a.out  # start gdbserver listening on port 10000
Run Code Online (Sandbox Code Playgroud)

在另一个窗口:

gdb -ex 'target remote :10000' ./a.out
Run Code Online (Sandbox Code Playgroud)

现在你将拥有一个带有远程目标的GDB(gdbserver在同一主机上运行)tstart等等.

更新:

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

在使用之前tstart,您需要设置跟踪和操作,如此处所述.

你不能,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
Run Code Online (Sandbox Code Playgroud)

这听起来像你gdbserver的老了,事实上并不支持追踪.

做什么

gdb --version
gdbserver --version
Run Code Online (Sandbox Code Playgroud)

生产?

更新3:

显然,你gdbserver 太旧了.

尽管自4.17版本以来GDB本身支持跟踪点,但gdbserver只开始支持版本7.2的跟踪点

更新4:

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

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

gdbserver :10000 ./a.out -f filename
Run Code Online (Sandbox Code Playgroud)