dprintf
(Dynamic printf
)
https://sourceware.org/gdb/onlinedocs/gdb/Dynamic-Printf.html
This is the most convenient solution for the specific case of printing things:
dprintf <line>, "%u\n", variable
e.g.:
dprintf 10, "%u %u\n", i, r
It could also in principle be faster than commands
as it could compile and inject code, instead of giving control back to GDB to interpret arbitrary command strings, which is extremely slow, but it doesn't seem to do that and is only marginally faster than commands
, see also: What is the difference between dprintf vs break + commands + continue? I've asked if there's a way to use compile code
to speed things up at: GDB compile code and don't remove injected code after execution
Detailed example:
main.c
#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
uint32_t i;
uint32_t r = 0;
for (i = 0; i < 10; ++i) {
r += i*i + 13*r*i + 17; /* LINE 10. */
}
printf("%" PRIu32 "\n", r);
return EXIT_SUCCESS;
}
Then:
gcc -ggdb3 -O0 -std=c99 -o main main.c
gdb -batch --nh -q -ex 'dprintf 10, "%u %u\n", i, r' -ex 'run' ./main
Output:
Dprintf 1 at 0x400545: file main.c, line 10.
0 0
1 17
2 256
3 6933
4 277346
5 14699371
6 970158528
7 3628079733
8 3070853710
9 317092431
3057168588
[Inferior 1 (process 14305) exited normally]
Tested in Ubuntu 16.04, GDB 8.2.