Tôi đang sử dụng valgrind để thử và theo dõi rò rỉ bộ nhớ là máy khách mysql C++ được phân phối từ mysql.Sử dụng valgrind để tìm rò rỉ bộ nhớ trong máy khách mysql C++
Trong cả hai ví dụ (resultset.cpp) và chương trình của riêng tôi, có một khối 56 byte duy nhất không được giải phóng. Trong chương trình của riêng tôi, tôi đã theo dõi sự rò rỉ cho một cuộc gọi đến máy khách mysql.
Dưới đây là kết quả khi tôi chạy thử nghiệm:
valgrind --leak-check=full --show-reachable=yes ./my-executable
==29858== Memcheck, a memory error detector
==29858== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
==29858== Using Valgrind-3.6.0.SVN-Debian and LibVEX; rerun with -h for copyright info
==29858== Command: ./my-executable
==29858==
==29858==
==29858== HEAP SUMMARY:
==29858== in use at exit: 56 bytes in 1 blocks
==29858== total heap usage: 693 allocs, 692 frees, 308,667 bytes allocated
==29858==
==29858== 56 bytes in 1 blocks are still reachable in loss record 1 of 1
==29858== at 0x4C284A8: malloc (vg_replace_malloc.c:236)
==29858== by 0x400D334: _dl_map_object_deps (dl-deps.c:506)
==29858== by 0x4013652: dl_open_worker (dl-open.c:291)
==29858== by 0x400E9C5: _dl_catch_error (dl-error.c:178)
==29858== by 0x4012FF9: _dl_open (dl-open.c:583)
==29858== by 0x7077BCF: do_dlopen (dl-libc.c:86)
==29858== by 0x400E9C5: _dl_catch_error (dl-error.c:178)
==29858== by 0x7077D26: __libc_dlopen_mode (dl-libc.c:47)
==29858== by 0x72E5FEB: pthread_cancel_init (unwind-forcedunwind.c:53)
==29858== by 0x72E614B: _Unwind_ForcedUnwind (unwind-forcedunwind.c:126)
==29858== by 0x72E408F: __pthread_unwind (unwind.c:130)
==29858== by 0x72DDEB4: pthread_exit (pthreadP.h:265)
==29858==
==29858== LEAK SUMMARY:
==29858== definitely lost: 0 bytes in 0 blocks
==29858== indirectly lost: 0 bytes in 0 blocks
==29858== possibly lost: 0 bytes in 0 blocks
==29858== still reachable: 56 bytes in 1 blocks
==29858== suppressed: 0 bytes in 0 blocks
==29858==
==29858== For counts of detected and suppressed errors, rerun with: -v
==29858== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 8 from 6)
Tôi có một số câu hỏi về vấn đề này:
- Làm thế nào tôi nên giải thích các khối --show-thể truy cập?
- Khối đó có hữu ích cho tôi để thử và không về lỗi này không?
- Nếu khối không hữu ích, valgrind có cơ chế khác giúp tôi theo dõi rò rỉ không?
- Nếu không, có một số công cụ khác (hy vọng OSS trên Linux) để giúp tôi thu hẹp điều này xuống không?
Thanks in advance ..
UPDATE: Dưới đây là đoạn code mà tôi tìm thấy trên hệ thống của tôi cho định nghĩa của pthread_exit. Tôi không chắc chắn rằng đây là nguồn thực sự đang được gọi. Tuy nhiên, nếu có, bất cứ ai có thể giải thích những gì có thể xảy ra không?
void
pthread_exit (void *retval)
{
/* specific to PTHREAD_TO_WINTHREAD */
ExitThread ((DWORD) ((size_t) retval)); /* thread becomes signalled so its death can be waited upon */
/*NOTREACHED*/
assert (0); return; /* void fnc; can't return an error code */
}
Cảm ơn Tim. Điều đó chắc chắn sẽ giúp. Bạn có bất cứ đề nghị về cách tôi có thể xác định vị trí dòng mã mà không giải phóng bộ nhớ một cách rõ ràng? Bạn có biết bất kỳ công cụ nào có thể hữu ích khi làm điều đó không? – Homer6
@ Homer6 Nó thực sự là pthread làm điều đó, không có gì bạn có thể sửa chữa (trừ khi bạn muốn đào sâu vào 'pthread_exit()', tìm nó, tìm nó, miễn phí rõ ràng) .. nhưng sau đó chỉ sửa chữa nó trên máy của bạn :) –
Cảm ơn Tim.Tôi đã đăng các định nghĩa (hoặc những gì tôi nghĩ là định nghĩa) cho pthread_exit. Bất kỳ ý tưởng về những gì có thể xảy ra? – Homer6