dprintf
(Dynamique printf
)
https://sourceware.org/gdb/onlinedocs/gdb/Dynamic-Printf.html
C'est la solution la plus pratique pour le cas spécifique de l'impression de documents :
dprintf <line>, "%u\n", variable
Il pourrait également être plus rapide que commands
car il pouvait compiler et injecter du code, au lieu de laisser le contrôle à GDB pour interpréter des chaînes de commande arbitraires, ce qui est extrêmement lent. TODO Je ne sais pas si c'est déjà fait. dprintf
vs commands
: Quelle est la différence entre dprintf et break + commande + continue ?
Exemple détaillé :
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;
}
Ensuite :
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]
Testé sous Ubuntu 16.04, GDB 8.2.