Reputation: 39218
I would like to record the value of a local variable, t
, each time that the program reaches a certain line. Accordingly, I tried:
(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'
but the error messages "You can't do that when your target is `exec'" and "You can't do that when your target is `child'" are not helpful to me. What do these errors mean?
Upvotes: 6
Views: 15319
Reputation: 213877
The tracepoint facility is currently available only for remote targets.
You should be able to perform the tracing experiment you desire by using gdbserver. Example:
$ gdbserver :0 ./a.out
Process ./a.out created; pid = 21838
Listening on port 51596
In another window:
$ 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 now collects the data ...
Upvotes: 15