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:
biegnę valgrind wprowadzając
valgrind --tool=memcheck --vgdb=yes --vgdb-error=0 ./prgm.run
z innego sesja terminalowa, uruchamiam gdb przy użyciu
gdb ./prgm.run
połączyć gdb do Valgrind
(gdb) target remote | vgdb
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
Nadal występuje błąd przy użyciu valgrind v3.11.0 i gdb RHEL 7.11-67.el6. –