我想使用跟踪点来调试我有完全访问权限的本地计算机上的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)
| 归档时间: |
|
| 查看次数: |
3471 次 |
| 最近记录: |