gdb:tstart 错误的含义“当你的目标是‘exec’时你不能这样做”
Posted
技术标签:
【中文标题】gdb:tstart 错误的含义“当你的目标是‘exec’时你不能这样做”【英文标题】:gdb: Meaning of tstart error "You can't do that when your target is `exec'" 【发布时间】:2010-09-11 14:45:43 【问题描述】:我想记录一个局部变量t
的值,每次程序到达某一行。因此,我尝试了:
但是错误消息“当你的目标是 `exec' 时你不能这样做”和“当你的目标是 `child' 时你不能这样做”对我没有帮助。这些错误是什么意思?
【问题讨论】:
为什么要在本地程序上使用trace
?如果您的目标是让断点 + 命令更快,目前似乎没有替代方案,但未来可能会有建议的代码注入功能:***.com/a/31712150/895245
【参考方案1】:
The tracepoint facility is currently available only for remote targets.
您应该能够使用 gdbserver 执行您想要的跟踪实验。示例:
$ gdbserver :0 ./a.out
Process ./a.out created; pid = 21838
Listening on port 51596
在另一个窗口中:
$ gdb -q ./a.out
Reading symbols from /tmp/a.out...done.
(gdb) target remote :51596
0x00007fa76ec3fa60 in _start () from /lib64/ld-linux-x86-64.so.2
(gdb) list foo
1 int foo(int x)
2
3 return x;
4
5
6 int main()
7
8 for(int i = 0; i < 10; ++i)
9 foo(i);
10 return 0;
11
(gdb) trace 3
Tracepoint 1 at 0x40053f: file t.c, line 3.
(gdb) actions
> collect x
> end
(gdb) c
Tracing Experiment 现在收集数据...
【讨论】:
解释一下为什么它只适用于remote
也很酷。我猜这不是硬件支持,它的存在只是为了减少将控制权返回给 GDB 的许多断点的带宽瓶颈。以上是关于gdb:tstart 错误的含义“当你的目标是‘exec’时你不能这样做”的主要内容,如果未能解决你的问题,请参考以下文章
cuda-gdb:“CUDA_EXCEPTION_9:Warp Hardware Stack Overflow”的含义/出现