The ‘nana-trace’ executes a program and generates a message for each line of code executed (a statement trace). The statement level trace is useful for things such as:
For example the ‘make ex-trace’ command in ‘gdb’ generates:
% make ex-trace
gcc -g test.c
sh ./nana-trace a.out
47 setbuf(stdout, NULL); /* disable buffering */
49 printf("** main()\n");
** main()
50 printf("** 1: %d\n", distance(1,-5));
distance (i=1, j=-5) at test.c:43
43 return abs(i - j);
abs (i=6) at test.c:35
35 if(i >= 0) {
36 return i;
40 }
distance (i=1, j=-5) at test.c:44
44 }
** 1: 6
main () at test.c:51
51 printf("** 2: %d\n", distance(twice(1),-5));
twice (i=1) at test.c:29
29 i = i * 2;
31 return i ;
32 }
distance (i=2, j=-5) at test.c:43
43 return abs(i - j);
abs (i=7) at test.c:35
35 if(i >= 0) {
36 return i;
40 }
distance (i=2, j=-5) at test.c:44
44 }
** 2: 7
main () at test.c:52
52 printf("** 3: %d\n", distance(3,-5));
distance (i=3, j=-5) at test.c:43
43 return abs(i - j);
abs (i=8) at test.c:35
35 if(i >= 0) {
36 return i;
40 }
distance (i=3, j=-5) at test.c:44
44 }
** 3: 8
main () at test.c:53
53 }