2016-06-09 18 views
5

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:

  1. corro valgrind inserendo

    valgrind --tool=memcheck --vgdb=yes --vgdb-error=0 ./prgm.run 
    
  2. Da un altro sessione terminale, eseguo gdb utilizzando

    gdb ./prgm.run 
    
  3. mi connetto gdb per Valgrind

    (gdb) target remote | vgdb 
    
  4. 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

+0

Ancora un problema utilizzando valgrind v3.11.0 e gdb RHEL 7.11-67.el6. –

risposta

4

è anche possibile utilizzare il COMAND

(gdb)monitor v.kill 

è stata quotata aiuto monitor gdb.

+0

Al prompt 'gdb' (GNU gdb RHEL v7.11-67.el6), 'monitor v.kill' ha restituito: ' '' "monitor" comando non supportato da questa destinazione. '' ' –

+0

@bucket brillante, grazie! –

+0

@Egbert probabilmente la tua versione di gdb è diversa dalla mia (v 8.0). Prova il comando "monitor help" per vedere se la versione di gdb ha un altro comando per uccidere il processo valgrind. – bucket

-2

le seguenti opere per me:

  1. Stacca dal gdb prima: (gdb) detach.
  2. Quindi chiudere gdb: (gdb) quit.
  3. Quindi CTRL + C valgrind.
+0

Al 'valgrind', premendo CTRL + C non si modifica nulla. –

Problemi correlati