Chcę sprawdzić długotrwały proces wycieków pamięci za pomocą valgrind. Podejrzewam, że wyciek pamięci, o którym mówię, może nastąpić dopiero po kilku godzinach egzekucji. Mogę uruchomić aplikację pod kontrolą valgrind i uzyskać log Valgrind w porządku, ale oznacza to, że muszę opuścić aplikację i zacząć od nowa na nową sesję Valgrind, na którą wciąż będę musiał czekać kilka godzin. Czy możliwe jest utrzymanie valgrindu i uruchomionej aplikacji, a mimo to uzyskiwanie danych valgrind (częściowych) w dowolnym momencie podczas wykonywania?Czy można wykonać valgrindowe raporty częściowe bez konieczności zamykania profilowanej aplikacji?
Q
Czy można wykonać valgrindowe raporty częściowe bez konieczności zamykania profilowanej aplikacji?
5
A
Odpowiedz
8
Możesz to zrobić, korzystając z Valgrind gdbserver and GDB.
W skrócie, to uruchomić program z valgrind jak zwykle, ale z przełącznikiem --vgdb=yes
:
$ valgrind --tool=memcheck --vgdb=yes ./a.out
W innej sesji, zaczynasz gdb na tym samym pliku wykonywalnego, a następnie podłącz do valgrind. Następnie można wydać Valgrind polecenia:
$ gdb ./a.out
...
(gdb) target remote | vgdb
....
(gdb) monitor leak_check full reachable any
==8677== 32 bytes in 1 blocks are definitely lost in loss record 1 of 2
==8677== at 0x4C28E3D: malloc (vg_replace_malloc.c:263)
==8677== by 0x400591: foo (in /home/me/tmp/a.out)
==8677== by 0x4005A7: main (in /home/me/tmp/a.out)
==8677==
==8677== 32 bytes in 1 blocks are definitely lost in loss record 2 of 2
==8677== at 0x4C28E3D: malloc (vg_replace_malloc.c:263)
==8677== by 0x400591: foo (in /home/me/tmp/a.out)
==8677== by 0x4005AC: main (in /home/me/tmp/a.out)
==8677==
==8677== LEAK SUMMARY:
==8677== definitely lost: 64 bytes in 2 blocks
==8677== indirectly lost: 0 bytes in 0 blocks
==8677== possibly lost: 0 bytes in 0 blocks
==8677== still reachable: 0 bytes in 0 blocks
==8677== suppressed: 0 bytes in 0 blocks
==8677==
(gdb)
Zobacz instrukcję dla listy poleceń, here dla memcheck.
Powiązane problemy
- 1. Czy można zamknąć czytnik bez zamykania strumienia?
- 2. Budowanie relacji ActiveRecord bez konieczności to wykonać zapytanie
- 3. Zamknij Skaner bez zamykania System.in
- 4. Czy można wykonać procedurę składowaną na zestawie bez użycia kursora?
- 5. Jak wykonać częściowe dopasowanie w Elasticsearch?
- 6. Jak zatrzymać debugowanie bez zamykania aplikacji w Android Studio 2
- 7. Lokalizacja IPhone: Czy można łatwo tłumaczyć pliki stalówki bez konieczności kopiowania stalówki dla każdego języka?
- 8. RaceOnRCWCleanup podczas zamykania aplikacji WPF
- 9. Czy można wykonać takie zapytanie?
- 10. WPF ControlTemplate częściowe zastąpienie
- 11. window.print() - bez konieczności otwierania okna drukowania
- 12. Czy można importować istniejące raporty SSRS w Visual Studio?
- 13. Serwer SQL - czy można wykonać procedurę składowaną
- 14. Czy można przenieść woluminy EC2 do lodowca Amazon bez konieczności pobierania i wysyłania?
- 15. Zaktualizuj konfigurację logowania bez konieczności ponownego wdrażania.
- 16. "System.Threading.Tasks.TaskCanceledException" wystąpił w WindowsBase.dll podczas zamykania aplikacji
- 17. Java - Czy ByteArrayOutputStream jest bezpieczny bez opróżniania() i zamykania()?
- 18. Czy istnieje sposób zamknięcia programu Writer bez zamykania strumienia bazowego?
- 19. Przewijanie RichEdita bez konieczności ustawiania ostrości
- 20. Problem renderowania częściowe w układzie aplikacji (Rails)
- 21. Przycisk zamykania qtip2 bez paska tytułu
- 22. Czy można odzyskiwać pule aplikacji IIS bez utraty sesji użytkownika?
- 23. Raporty Jaspera: sub-raporty powodują nieskończoną pętlę
- 24. Ciąg Java [] częściowe kopiowanie
- 25. Jak zamknąć wszystkie Executory podczas zamykania aplikacji?
- 26. Android - przeciąganie znacznika bez konieczności trzymania mapy api v2
- 27. Czy można wykonać aplet sieciowy JavaFX?
- 28. Czy można wykonać Includes with flask?
- 29. Czy można wykonać bezpieczne żądanie JSONP?
- 30. Czy można wykonać niestandardowy przerywnik w zespole?