Sau nhiều năm làm việc trên một thư viện C++ đa năng sử dụng trình biên dịch Microsoft MSVC trong Visual Studio, chúng tôi đang chuyển nó sang Linux/Mac OS X (cầu nguyện cho chúng tôi). Tôi đã trở nên quen thuộc và khá thích cơ chế phát hiện rò rỉ bộ nhớ đơn giản trong MSVC:Phát hiện rò rỉ bộ nhớ GCC tương đương với Microsoft crtdbg.h?
#ifdef DEBUG
#define _CRTDBG_MAP_ALLOC
#define NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#include <stdlib.h>
#include <crtdbg.h>
#else
#define NEW new
#endif
Mọi phân bổ bộ nhớ được thực hiện bằng macro MỚI này. Bất cứ khi nào một quá trình sử dụng thư viện của chúng tôi chấm dứt, mọi rò rỉ bộ nhớ (các khối không được phân bổ) được báo cáo trên bàn điều khiển cùng với tệp và dòng # nơi bộ nhớ ban đầu được cấp phát.
Phần về điều này mà tôi thích là tôi không phải chủ động "chạy với công cụ hiệu suất" hoặc nói cách khác là tôi đang tìm kiếm sự rò rỉ. Rò rỉ được báo cáo cho tôi trong quá trình phát triển thông thường, mỗi khi quá trình chấm dứt.
Bây giờ chúng ta đang chuyển sang thế giới GCC, tôi thấy rằng các công cụ phát hiện rò rỉ bộ nhớ, nhiều công cụ khá phức tạp, yêu cầu tôi chỉ rõ rằng tôi đang ở chế độ tìm kiếm bị rò rỉ. IDE của tôi là Xcode và tôi đã xem xét một số công cụ phát hiện phân bổ/rò rỉ (như Instruments và MallocDebug) nhưng tôi thừa nhận tôi đã không dành thời gian để thu hút đầu tôi hoàn toàn. Tôi tiếp tục bị sa thải bởi thực tế rằng tôi thực sự phải xác định rằng tôi đang tìm kiếm một rò rỉ trước thời hạn, thay vì được cảnh báo với nó tự động.
Tôi đang sử dụng Xcode 3.2 và tôi nghe rằng hiện có tích hợp tiện lợi với công cụ phân tích tĩnh, nhưng một lần nữa tôi chưa xem xét điều này. Tôi đang tìm một số ý tưởng về những lựa chọn của tôi. Có cơ chế so sánh được tích hợp vào GCC và/hoặc Xcode không? Có một thư viện hoặc công cụ bên thứ ba đơn giản nào thực hiện chức năng cơ bản mà tôi biết và yêu thích không? Hay tôi nên mút nó lên và học cách làm mới?
Chính xác những gì tôi đang tìm kiếm, cảm ơn bạn! –
tìm đẹp ... +1 cho câu hỏi và câu trả lời. – Nicholaz