mezda
mezda

Reputation: 3647

setting the tracepoints but not able to find the trace data as tfind shows "Target failed to find requested trace frame."

i wrote a very small prog below to add two integers just to check the usage of tracepoints.

1 #include<stdio.h>
2 main(){
3         int x,y,sum;
4         x = 3;
5         y = 4;
6         sum = x + y;
7         printf("sum = %d\n",sum);
8 }       

on one terminal, i ran gdbserver as :

$ gdbserver :10000 ./chk
Process ./chk created; 
pid = 13956
Listening on port 10000
Remote debugging from host 127.0.0.1

On other terminal,i ran gdb as :

$ gdb -ex 'target remote :10000' ./chk

and then the following steps as shown below :

(gdb) trace chk.c:6
Tracepoint 1 at 0x80483fd: file chk.c, line 6.

(gdb) passcount 1 1
Setting tracepoint 1's passcount to 1

(gdb) actions 1
Enter actions for tracepoint 1, one per line.
End with a line saying just "end".

>collect $regs
>end
(gdb) tstart
(gdb) tstatus
Trace is running on the target.
Collected 0 trace frames.
Trace buffer has 5242880 bytes of 5242880 bytes free (0% full).
Trace will stop if GDB disconnects.
Not looking at any trace frame.

(gdb) tstop
(gdb) tfind
Target failed to find requested trace frame.

(gdb) tdump
warning: No current trace frame.

Can anyone please let me know why tstatus,tfind and tdump are giving me such an output? What is the issue here? How can i check the value of my trace (which i have given here as $regs) ?

Upvotes: 1

Views: 680

Answers (1)

Employed Russian
Employed Russian

Reputation: 213829

why tstatus,tfind and tdump are giving me such an output

When you attach GDB, the inferior (being debugged) process is stopped in _start (i.e. has not reached main yet).

After you start the tracing experiment with tstart, you need to continue execution of the inferior, so it reaches your trace point, and automatically stops the trace (with continue GDB command).

Instead, you are stopping the experiment immediately (with tstop), which leads to empty trace.

Upvotes: 1

Related Questions