Sto eseguendo il debug di un programma usando valgrind e gdb. Comunque termino quelle sessioni di debug in modo barbaro ... È davvero come dovrebbe essere fatto?Esci da valgrind in modo pulito durante il debug con gdb
Impostazione della sessione di debug
Seguendo le istruzioni del official valgrind website faccio la seguente per eseguire il programma:
corro valgrind inserendo
valgrind --tool=memcheck --vgdb=yes --vgdb-error=0 ./prgm.run
Da un altro sessione terminale, eseguo gdb utilizzando
gdb ./prgm.run
mi connetto gdb per Valgrind
(gdb) target remote | vgdb
ho eseguito il programma dal gdb CLI
(gdb) c
Fin qui tutto bene: il programma viene eseguito in entrambi i terminali (quello utilizzato per valgrind e quello usato per gdb). Allora valgrind trova un errore, ad esempio una lettura non valida, e l'esecuzione del programma è in pausa.
Terminare la sessione
A quel punto, voglio a giocherellare con il mio codice: forse risolvere qualcosa o commentare/decommentare roba dalla sorgente del programma. Di conseguenza, il programma deve essere compilato di nuovo. Viene generato un nuovo binario. Successivamente, voglio interrompere le sessioni in corso di valgrind e gdb (che utilizzavano il vecchio binario) e avviare nuove sessioni valgrind e gdb che utilizzeranno il nuovo binario.
Per interrompere una sessione in corso, ho smesso gdb
(gdb) q
volte valgrind nota che gdb non c'è più e si chiude anche. Ma altre volte valgrind continua ad andare anche se non esiste più nessun processo gdb ...
In tal caso, uccido il processo "memcheck-amd64-" corrispondente alla mia sessione valgrind. Il numero di quel processo è indicato nei messaggi valgrind ad es. 16195
in ==16195== Invalid read of size 8
).
kill -9 16195
Un kill non basta: ho bisogno di usare l'opzione .
Non credo che invocare kill -9
è come deve essere fatto ... Mi manca qualcosa?
versione valgrind: 3.10.1
versione gdb: 7.7.1
Ancora un problema utilizzando valgrind v3.11.0 e gdb RHEL 7.11-67.el6. –