/ / Analiza wycieków pamięci - c ++, macos, wycieki pamięci, gdb, instrumenty

Analizowanie wycieku pamięci - c ++, macos, wycieki pamięci, gdb, instrumenty

Przepraszam za ogólny tytuł, ale nie wiedziałem, jak lepiej to wyjaśnić.

Piszę program w C ++ na MacOS 10.8.3. Próbowałem przeanalizować, czy nie ma wycieków pamięci za pomocą Instrumentów Apple i oto wyniki

wprowadź opis obrazu tutaj

Niestety (nie wiem, dlaczego tak naprawdę) Drzewo połączeń nie pokazuje żadnych wpisów, więc nie byłem w stanie zrozumieć, które połączenie jest odpowiedzialne za wyciek.

Instruments pokazuje jednak adreswyciekła pamięć, więc otworzyłem gdb i podłączyłem go do uruchomionego procesu, aby przeanalizować zawartość pamięci i uzyskać kilka wskazówek na temat błędu. Oto, co zwrócił gdb

(gdb) x/s 0x7fa0f3400720
0x7fa0f3400720:  "OS_dispatch_queue_specific_queue"
(gdb) x/s 0x7fa0f34005d0
0x7fa0f34005d0:  "OS_xpc_connection"
(gdb) x/s 0x7fa0f3400640
0x7fa0f3400640:  "OS_dispatch_object"
(gdb) x/s 0x7fa0f3400660
0x7fa0f3400660:  "OS_dispatch_queue"
(gdb) x/s 0x7fa0f3400680
0x7fa0f3400680:  "OS_dispatch_source"
(gdb) x/s 0x7fa0f34006a0
0x7fa0f34006a0:  "OS_dispatch_semaphore"
(gdb) x/s 0x7fa0f34006c0
0x7fa0f34006c0:  "OS_dispatch_group"

i tak dalej. Oczywiście nie mam żadnego z tych ciągów w moim kodzie.

Wykorzystuję masę pthreads do przyspieszeniaobliczenia. Czy te wycieki mogą być spowodowane błędami w użyciu pthreads, czy przyczyną jest coś innego? Właściwie to, co mnie zaskakuje, to, że wycieki są (względnie) małe, a jeśli w moim kodzie wystąpił błąd projektowy, oczekiwałbym znacznie większych wycieków (kod działa przez chwilę i tworzę i niszczę setki - jeśli nie) tysiące - wątków).

W razie potrzeby mogę pokazać części mojego kodu (chociaż projekt nie jest zbyt duży, z pewnością jest zbyt duży, aby go tutaj opublikować).

Wszelkie sugestie są mile widziane.

Odpowiedzi:

0 dla odpowiedzi № 1

Nie wiem dużo o instrumentach. Możesz spróbować valgrind, bardzo przydatne jest wykrycie wycieku pamięci.