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
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 № 1Nie wiem dużo o instrumentach. Możesz spróbować valgrind, bardzo przydatne jest wykrycie wycieku pamięci.