2010-10-25 37 views
5

Tôi khá mới đối với C++ nhưng có một số kiến ​​thức cơ bản về C. Trong quá khứ của tôi C (trường đại học) dự án, tôi đã sử dụng Valgrind để kiểm tra memleaks.Valgrind được sử dụng trong phát triển C++?

Bây giờ, với C++, Valgrind có phải là công cụ hợp lệ không? Có C + + bị các vấn đề tương tự liên quan đến memleaks như C? Hoặc có những công cụ tốt hơn để sử dụng kết hợp với C++?

Trả lời

8

Tôi không bao giờ sử dụng newdelete (hoặc các hình thức quản lý bộ nhớ thủ công khác) và tôi rất hiếm khi sử dụng con trỏ. Và tôi vẫn còn phải vật lộn với rò rỉ bộ nhớ truy cập bộ nhớ không hợp lệ. Valgrind là một công cụ không thể thiếu đối với tôi. Quan trọng hơn cả gdb.


Như Viktor chỉ ra trong một chú thích, sản xuất rò rỉ bộ nhớ mà không quản lý bộ nhớ của nhãn hiệu sẽ là khá kỳ lạ (chiết khấu tham chiếu vòng tròn và các trường hợp đặc biệt khác).

+0

Sau đó, tôi đề nghị bạn sử dụng thư viện khác nhau. –

+1

@Viktor: thừa nhận, điều này * là * phần lớn là lỗi của thư viện. Nhưng ngay cả việc triển khai STL hiện đại cũng vui vẻ chấp nhận truy cập ngoài phạm vi trên 'toán tử []' mà không thốt ra nhiều như cảnh báo, ngay cả trong debug được xây dựng (GCC…). –

+2

Nhưng đó không phải là rò rỉ bộ nhớ? Tôi không muốn được tự mãn, nhưng nếu bạn không bao giờ viết "= new" trong mã của bạn (lưu ý "="), bạn không bị rò rỉ bộ nhớ (có, shared_ptrs có thể tham chiếu chéo lẫn nhau, nhưng điều đó xảy ra rất hiếm khi) –

4

Valgrind thể được sử dụng để kiểm tra memleaks trong C++ cũng

valgrind có rất nhiều lựa chọn mà sẽ cung cấp cho bạn thông tin và bạn có thể khám phá callgrind cũng có.

--Che

2

Rò rỉ bộ nhớ là mối quan tâm với bản thân tôi với tư cách là nhà phát triển C++. Tôi cho rằng họ cũng quan tâm đến các nhà phát triển khác, mặc dù tôi không thể nói cho tất cả mọi người. Valgrind là một công cụ tuyệt vời trong không gian này và tôi thực sự không thể sống thiếu nó.

1

Valgrind là công cụ tốt nhất hiện có để xử lý lỗi bộ nhớ (nhưng hãy kiểm tra các mô-đun khác bên cạnh memcheck).

Lập trình kiểu C là một cách tiếp cận lập trình hợp lệ (và được sử dụng rộng rãi) trong C++, do đó có, vấn đề về bộ nhớ vẫn là một vấn đề.

+0

Chỉ sử dụng memcheck. Bạn có thể giới thiệu những mô-đun nào khác? – helpermethod

4

Mặc dù C++ xử lý bộ nhớ tốt hơn nhiều so với C nhưng vẫn có thể gây rối. Con trỏ thông minh rất tuyệt, nhưng có thể mắc lỗi với chúng. Đó là những gì valgrind là cho.

1

vâng, đúng vậy.

tôi sử dụng phân bổ động theo mặc định trong các kiểm tra đơn vị (với con trỏ tự động hoặc tương đương thành ngữ), để kiểm tra rõ ràng các lỗi bộ nhớ mà valgrind có thể phát hiện. valgrind, guardmalloc, leaks, vv có thể bắt được nhiều lỗi trước khi chúng nhập mã sản xuất.

2

nhớ để kể thời gian chạy gcc không sử dụng hồ bơi bộ nhớ riêng của nó nếu không bạn sẽ nhầm lẫn valgrind

GLIBCPP_FORCE_NEW = 1

+0

Rõ ràng là 'GLIBCXX_FORCE_NEW' từ gcc 3.4 trở đi. bạn có thể muốn liên kết đến [Câu hỏi thường gặp của Valgrind] (http://valgrind.org/docs/manual/faq.html#faq.reports) về việc này. – Hasturkun

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