首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tracepoint在gdb中不起作用,它显示“跟踪只能在远程目标上运行”。

Tracepoint在gdb中不起作用,它显示“跟踪只能在远程目标上运行”。
EN

Stack Overflow用户
提问于 2012-02-01 21:06:47
回答 1查看 4K关注 0票数 4

我想使用跟踪点在我拥有完全访问权限的本地计算机上调试一个程序。我可以设置跟踪点及其通行数,并使用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“,但它再次显示”跟踪只能在远程目标上运行“。

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

谢谢维卡斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-02 00:10:17

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

这就是消息所说的意思: tracepoint工具只在gdbserver中实现,而不是在GDB本身中实现,所以在本地调试时不能使用tstart (当GDB直接控制较低的(被调试的)进程时)。

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

代码语言:javascript
复制
gdbserver :10000 ./a.out  # start gdbserver listening on port 10000

在另一个窗口中:

代码语言:javascript
复制
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:

代码语言:javascript
复制
(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很旧,实际上不支持跟踪。

做什么?

代码语言:javascript
复制
gdb --version
gdbserver --version

生产?

更新3:

显然你的gdbserver 太老了。

尽管GDB本身从版本4.17开始支持跟踪点,但gdbserver仅在版本7.2时才开始支持跟踪点。

更新4:

将此选项指定为"-f

“的位置,我的程序将其作为输入

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

代码语言:javascript
复制
gdbserver :10000 ./a.out -f filename
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9096321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档