Strategi apa yang Anda gunakan saat melacak masalah terkait memori? Alat apa yang Anda gunakan (open source dan proprietary) untuk mengidentifikasi kebocoran memori, kerusakan memori, dll? Bagaimana Anda melacak kebocoran memori jika hanya gdb / dbx tersedia pada suatu sistem?
Bagi saya, memperbaiki kebocoran memori hanya dengan debugger sangat sulit.
debugging
memory-leaks
Hemant
sumber
sumber
Jawaban:
Jika Anda dapat mengubah kode sumber, Dmalloc hebat; itu akan mencantumkan pointer mana yang tidak dibuat dan (untuk kode yang dibangun dengan simbol debugging) tepat pada baris mana mereka dialokasikan.
Jika Anda tidak bisa, Valgrind cukup standar untuk hal semacam itu. Saya biasanya menemukan Valgrind agak sulit untuk digunakan, tetapi ia memiliki lebih banyak fitur dan tidak melibatkan penambahan panggilan dmalloc ke dalam kode Anda
sumber
valgrind sangat membantu.
sumber
Massif (dari valgrind) adalah salah satu cara terbaik untuk menemukan kebocoran memori. Ulangi kode mencurigakan Anda (atau jalankan program Anda cukup lama) dan buang hasilnya dengan ms_print. Biasanya, tumpukan panggilan memberi Anda cukup informasi untuk memperbaikinya.
Dengan GDB, Anda dapat mencoba melampirkan ke program yang sedang berjalan dan memanggil fungsi seperti
malloc_stats()
Jika program Anda ditulis dalam bahasa yang berbeda, itu mungkin lebih rumit. Baru-baru ini, beberapa GDB telah memperoleh skripibilitas, dan orang-orang memulai proyek menarik seperti gdb-heap , yang dapat menganalisis memori Python dari dump inti. Skrip analysys memori serupa mungkin untuk objek C ++.
Baca juga /programming/2564752/examining-cc-heap-memory-statistics-in-gdb
sumber
Untuk Solaris, ada beberapa alat yang tercantum dalam jawaban untuk pertanyaan StackOverflow ini (termasuk pengecekan kebocoran dengan bentuk lain dari akses memori buruk).
sumber
Saya telah melakukan Objective-C selama beberapa waktu, dan ada analisa yang menangani manajemen memori level C dan hal-hal seperti itu. Clang Static Analyzer sangat bagus sehingga Apple memutuskan untuk menggabungkannya dengan IDE xCode mereka. Saya tidak yakin apakah ini baik untuk pertanyaan Anda, tetapi jika Anda melakukan C maka patut dicoba.
sumber