I want to use tracepoints to debug a prog on a local machine where i have full access. I am able to set the tracepoint and its passcount and using info tr gives me
(gdb) info tr
Num Enb Address PassC StepC What
1 y 0x080b7529 2 0 in search_tcp at tcp_pkt.c:412
Actions for tracepoint 1: collect flow end
Then i run the prog, it runs as usual and in the end when i give tfind or tdump to collect the required data it shows:
(gdb) tfind 1
Trace can only be run on remote targets.
(gdb) tdump
Trace can only be run on remote targets.
Even i tried using "tstart" but it shows again "Trace can only be run on remote targets."
Any idea on what is the meaning of this message ? Is tracepoing usage not supported currently ? OR is it for debugging some remote machine over LAN or some other network ? Any help would be greatly appreciated.
thanks vikas
Any idea on what is the meaning of this message ?
The meaning is exactly what the message says: the tracepoint facility is implemented only in gdbserver, and not in GDB itself, so you can't use tstart when debugging natively (when GDB controls the inferior (being debugged) process directly).
Instead, you need to set up a remote debugging session (which can still be done on a single machine):
gdbserver :10000 ./a.out # start gdbserver listening on port 10000
In another window:
gdb -ex 'target remote :10000' ./a.out
Now you'll have GDB with a remote target (which is the gdbserver running on the same host), and tstart etc. will work.
Update:
But now i see the following msg:
(gdb) tstartTarget does not support this command.(gdb) rThe "remote" target does not support "run".
Before you can use tstart, you need to set trace and actions, as documented here.
And you can't run because the inferior process is already running. Use continue instead.
Update 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
It sounds like your gdbserver is old, and does in fact not support tracing.
What do
gdb --version
gdbserver --version
produce?
Update 3:
Apparently your gdbserver is too old.
Even though GDB itself supported tracepoints since version 4.17, gdbserver only started supporting the tracepoints with version 7.2
Update 4:
where to give this option "-f filename" that my program takes as input
Simple. You can read the documentation for gdbserver, but I believe you are looking for this invocation:
gdbserver :10000 ./a.out -f filename
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With