gdb:tstart错误的含义"当你的目标是'exec'时你不能这样做"

Dan*_*ien 6 c++ debugging trace gdb

我希望t每次程序到达某一行时记录局部变量的值.因此,我试过:

(gdb) trace stoer_wagner_min_cut.hpp :197
Tracepoint 1 at 0x4123a0: file ./boost/graph/stoer_wagner_min_cut.hpp, line 197.
(gdb) actions
Enter actions for tracepoint 1, one per line.
End with a line saying just "end".
> collect t
> end
(gdb) tstart
You can't do that when your target is `exec'
(gdb) break main
Breakpoint 2 at 0x401448: file time_stoer_wagner.cpp, line 50.
(gdb) run
Starting program: C:\Users\Daniel\Documents\projects\stoer_wagner_min_cut/time_stoer_wagner.exe
[New Thread 3908.0x39c]

Breakpoint 2, main () at time_stoer_wagner.cpp:50
50        std::ifstream ifs("prgen_500_50_2.txt");
(gdb) tstart
You can't do that when your target is `child'

但是错误消息"当你的目标是'exec'时你不能这样做"和"当你的目标是'孩子'时你不能这样做"对我没有帮助.这些错误意味着什么?

Emp*_*ian 14

tracepoint工具目前仅适用于远程目标.

您应该能够使用gdbserver执行所需的跟踪实验.例:

$ gdbserver :0 ./a.out 
Process ./a.out created; pid = 21838
Listening on port 51596
Run Code Online (Sandbox Code Playgroud)

在另一个窗口:

$ 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
Run Code Online (Sandbox Code Playgroud)

追踪实验现在收集数据......