2016-06-09 59 views
5

Jestem debugowania programu przy użyciu valgrind i gdb. Jednak kończę te sesje debugowania w sposób barbarzyński ... Czy tak naprawdę ma to być zrobione?Całkowicie wyczyść valgrind podczas debugowania z gdb

Konfigurowanie sesji debugowania

Postępując zgodnie z instrukcjami z official valgrind website I wykonaj następujące czynności, aby uruchomić program:

  1. biegnę valgrind wprowadzając

    valgrind --tool=memcheck --vgdb=yes --vgdb-error=0 ./prgm.run 
    
  2. z innego sesja terminalowa, uruchamiam gdb przy użyciu

    gdb ./prgm.run 
    
  3. połączyć gdb do Valgrind

    (gdb) target remote | vgdb 
    
  4. uruchomić program z gdb CLI

    (gdb) c 
    

tej pory tak dobrze: program działa w obu terminalach (jeden używany dla valgrind i ten używany dla gdb). Następnie valgrind znajduje błąd, na przykład nieprawidłowy odczyt, a wykonanie programu jest wstrzymane.

Zakończenie sesji

W tym momencie chcę bawić się z moim kodu: może coś naprawić lub komentarz/odkomentuj materiał od źródła programu. W konsekwencji program musi zostać skompilowany na nowo. Generowany jest nowy plik binarny. Następnie chcę zatrzymać trwające sesje valgrind i gdb (które używają starego pliku binarnego) i rozpocząć nowe sesje valgrind i gdb, które będą używać nowego pliku binarnego.

Aby zatrzymać w toku sesji, rzuciłem gdb

(gdb) q 

Czasami valgrind zauważa, że ​​gdb już nie ma i odchodzi zbyt. Ale innym razem valgrind wciąż działa - chociaż nie istnieje już proces gdb ...

W takim przypadku zabijam proces "memcheck-amd64-" odpowiadający mojej sesji Valgrind. Liczba tego procesu jest wskazana w komunikatach valgrind, np. 16195 w ==16195== Invalid read of size 8).

kill -9 16195 

Regularne zabicie to za mało: potrzebuję skorzystać z opcji .

Nie sądzę, aby wywołanie kill -9 było zrobione ... Czy brakuje mi czegoś?

valgrind wersja: 3.10.1

wersja gdb: 7.7.1

+0

Nadal występuje błąd przy użyciu valgrind v3.11.0 i gdb RHEL 7.11-67.el6. –

Odpowiedz

4

można również użyć COMAND

(gdb)monitor v.kill 

został wpisany na monitorze pomoc na gdb.

+0

Po znaku zachęty 'gdb' (GNU gdb RHEL v7.11-67.el6)' monitor v.kill' zakończył się wynikiem: '' ' Polecenie" monitor "nieobsługiwane przez ten cel. '' ' –

+0

@bucket genialny, dziękuję! –

+0

@Egbert prawdopodobnie twoja wersja gdb jest inna niż moja (v 8.0). Wypróbuj komendę "monitor help", aby sprawdzić, czy wersja gdb ma inne polecenie zabicia procesu valgrind. – bucket

-2

następujące prace dla mnie:

  1. odłączyć od gdb pierwszy: (gdb) detach.
  2. Następnie zamknij gdb: (gdb) quit.
  3. Następnie CTRL + C valgrind.
+0

Na "valgrind", naciśnięcie CTRL + C powoduje brak zmian. –