2012-02-07 36 views
7

Tôi thường viết các lớp của mình bằng C++ và kiểm tra xem chúng có bị rò rỉ bộ nhớ bằng cách sử dụng valgrind trên nền tảng Linux hay không. Tôi không hài lòng cho đến khi tất cả bộ nhớ heap được giải phóng.Các tệp đàn áp cho rò rỉ bộ nhớ Qt với Valgrind

Bắt đầu viết bằng Qt, tôi tìm thấy có bao nhiêu rò rỉ valgrind phát hiện, cũng trên một dự án đơn giản. Chúng quá nhiều đến nỗi khó phát hiện ra những rò rỉ tương tự của tôi.

Tôi đọc ở đâu đó có khả năng sử dụng một tập tin đàn áp cho valgrind giúp lọc ra các rò rỉ không mong muốn, nhưng tôi không thể tìm thấy nó.

Tôi đang sử dụng Ubuntu 11.04 x64, g ++ 4.5, Qt 4.7. Có ai biết cách đối phó với vấn đề này không?

Trả lời

6

Bạn có xem this "Valgrind Suppression File Howto" wiki không?

Chỉ để ghi lại có một số thư viện cơ bản trong Qt (đặc biệt là các thư viện trong quá trình vẽ) luôn luôn rò rỉ lượng bộ nhớ nhỏ. Đây là một trong những bạn cần phải ngăn chặn.

Như bạn đã nói, trước tiên bạn nên tạo một dự án tối thiểu, chạy nó để tạo một tệp đàn áp valgrind và sau đó áp dụng tệp đàn áp đó cho dự án của bạn.

+0

Cảm ơn bạn. Vì vậy, trước tiên tôi nên tạo một dự án tối thiểu, chạy nó để tạo ra một tệp đàn áp valgrind và sau đó áp dụng tệp đàn áp đó vào dự án của tôi, đúng không? – linello

+1

vâng, đúng vậy. – UmNyobe

0

Chỉ cần chú ý rằng rất nhiều thư viện có cấu trúc phân bổ nội bộ mà bạn sẽ không bao giờ tiếp cận để dọn dẹp và điều đó là bình thường.

+0

một vài trong nhiều rò rỉ không có những biểu tượng ở tất cả! – linello

-1

tôi Chỉ cần sử dụng tập tin ức chế để ngăn chặn tất cả các bộ nhớ thông báo từ thư viện Qt như thế này:

{ 
     <QtCore> 
     Memcheck:Leak 
     ... 
     obj:/usr/lib/x86_64-linux-gnu/libQtCore.so.4.8.6 
    } 

... 
+0

Đó là một ý tưởng tồi. Tôi đã tìm thấy những sai lầm trong mã của riêng tôi, nơi thực tế cuộc gọi mới là từ một trong các thùng chứa Qt (QHash), vì vậy nếu bạn ngăn chặn tất cả các thư viện Qt bạn sẽ bỏ lỡ điều đó. –

Các vấn đề liên quan