Có một thay thế Valgrind tốt cho Windows?


210

Tôi đã tìm hiểu về Valgrind để giúp cải thiện mã hóa / gỡ lỗi C của tôi khi tôi phát hiện ra nó chỉ dành cho Linux - Tôi không có nhu cầu hay mối quan tâm nào khác trong việc chuyển HĐH sang Linux, vì vậy tôi tự hỏi liệu có một chương trình nào tốt cho Windows không.


Những loại gỡ lỗi bạn đang tìm kiếm để làm gì? Valgrind là một bộ công cụ khá phong phú và các câu trả lời dưới đây chỉ ra tất cả các hướng. Với sự nhấn mạnh vào rò rỉ bộ nhớ / gỡ lỗi phân bổ.
jakobengblom2

1
Có lẽ bạn có thể kiểm tra mã trên máy Linux ảo bên trong Windows của mình, ngay khi bạn cần kiểm tra. bạn có thể chia sẻ thư mục phát triển giữa máy ảo và không ảo. đó là, nếu mã là đủ di động.
Liran Orevi

Câu trả lời:


29

Một số công cụ thương mại tốt hơn:


1
Thanh lọc: đáng kính nhưng vẫn hữu ích, như thể hiện qua bao nhiêu thay đổi về quyền sở hữu công ty mà nó đã tồn tại!
Norman Ramsey

2
Insure ++ mất mãi mãi để sử dụng mã của bạn và mãi mãi để thực thi mã của bạn khi chạy.
C Johnson

117

Như jakobengblom2 đã chỉ ra, valgrind có một bộ công cụ. Tùy thuộc vào cái nào bạn đang nói về có các bộ phận cửa sổ khác nhau. Tôi sẽ chỉ đề cập đến OSS hoặc các công cụ miễn phí ở đây.

1. MemCheck:

Trí nhớ tiến sĩ. Đây là một công cụ tương đối mới, hoạt động rất tốt trên Windows 7. Tính năng yêu thích của tôi là nó nhóm các ngăn xếp phân bổ rò rỉ tương tự trong báo cáo.

http://code.google.com.vn/p/drmemory/

Tôi cũng đã sử dụng UMDH ( http://support.microsoft.com/kb/268343 ) và thấy nó yên tĩnh hữu ích và dễ cài đặt. Nó hoạt động từ Win2000 đến Win7.

AppVerifier là một swissknife phải có cho các nhà phát triển mã gốc windows, trình kiểm tra "bộ nhớ" của nó thực hiện công việc tương tự http://msdn.microsoft.com/en-us/l Library / dd371695% 28v = vs85% 29.aspx

2. Callgrind:

Yêu thích của tôi là rất buồn ngủ ( http://www.codersnotes.com/s ngủy ) Nó rất nhỏ nhưng rất hữu ích và dễ sử dụng.

Nếu bạn cần nhiều tính năng hơn, Trình phân tích hiệu suất AMD CodeAnalyst ™ là miễn phí: http://developer.amd.com/documentation/ideo/pages/int sinhtiontoamdcodeanalystperformanceanalyzer.aspx

Các công cụ phân tích hiệu suất Windows miễn phí từ Microsoft, không dễ sử dụng nhưng có thể hoàn thành công việc nếu bạn sẵn sàng dành thời gian. http://bloss.microsoft.co.il/bloss/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx Tải xuống: http://msdn.microsoft.com/en-us/performance / cc752957

3. Khối lượng:

Các công cụ miễn phí tương tự (không hoàn toàn chính xác) trên windows là:

VMMap từ sysiternals: http://technet.microsoft.com/en-us/sysi INTERNals / dd535533

! heap lệnh trong Windbg: http://hacksoflife.blogspot.com/2009/06/heap-debugging-memoryresource-leak-with.html

4. Bộ nhớ đệm:

Các công cụ hiệu suất Windows đã đề cập ở trên có một số mức độ nhất định của bộ nhớ cache L2 có khả năng lược tả nhưng không hoàn toàn tốt và dễ sử dụng như Bộ nhớ đệm.

5. DRD:

Chưa tìm thấy bất cứ thứ gì miễn phí và mạnh mẽ như trên Windows, công cụ miễn phí duy nhất cho các cửa sổ mà tôi có thể thấy hơi gần đó là trình kiểm tra "khóa" trong AppVerifier: http://msdn.microsoft.com/en-us/l Library /dd371695%28v=vs85% 29.aspx


2
Ngoài ra còn có gperftools (trước đây là Google PerfTools) . Nó không phải là một sự thay thế valgrind (thực sự là gì) nhưng nó có một malloc mới, trình biên dịch cpu, trình biên dịch heap và trình kiểm tra. Đáng xem vì nó hỗ trợ trên Linux và Windows (bao gồm Mingw) và các đơn vị khác.
alexr

30

Tại sao không sử dụng Valgrind + Wine để gỡ lỗi ứng dụng Windows của bạn? Xem http://wiki.winehq.org/Wine_and_Valgrind

(Chromium sử dụng điều này để kiểm tra phiên bản Windows để tìm lỗi bộ nhớ; xem build.chromium.org và xem các thác nước thử nghiệm hoặc bộ nhớ và tìm kiếm rượu vang.)

Ngoài ra còn có Tiến sĩ bộ nhớ, xem trang webororio.org/drmemory.html


3
Bởi vì sau đó bạn sẽ không gỡ lỗi một ứng dụng Windows - bạn sẽ gỡ lỗi một ứng dụng Linux.
John Dibling

33
Không cần biên dịch lại trong Wine. Chỉ cần chuyển .exe và .pdb của bạn sang hộp Linux. Và bạn sẽ không gỡ lỗi một ứng dụng Linux; bạn đang gỡ lỗi ứng dụng Windows chính xác của mình.
Dan Kegel

2
Chính xác, tốt hơn là sử dụng vật thật hơn là một bản sao khập khiễng: D Love valgrind.
thay thế

11
Đẹp! Từ các cửa sổ, bạn có thể chạy một máy ảo chạy linux, chạy phần mềm của bạn trong rượu gần như vm, trong valgrind vm. Điểm thưởng nếu windows được chạy từ vm chạy linux bên trong windows vm :)
Imbrondir

15

Đối với Visual C ++, hãy thử Visual Leak dò . Khi tôi sử dụng nó, nó đã phát hiện rò rỉ bộ nhớ từ một newcuộc gọi và trả về dòng thực trong mã nguồn của rò rỉ. Bản phát hành mới nhất có thể được tìm thấy tại http://vld.codeplex.com/ .


Nó dường như không làm việc cho tôi. Tôi thậm chí đã thử tạo một dự án đơn giản mà về cơ bản không có gì ngoài việc phân bổ một số bộ nhớ và không giải phóng nó. VLD đã không phát hiện ra nó. : - |
Synetech

@Synetech inc. Tôi đã gặp vấn đề tương tự trong VS2010 ... Sử dụng phiên bản mới nhất của VLD đã giải quyết vấn đề của tôi
relaxxx

14

Môi trường phát triển cho Windows bạn đang sử dụng có thể chứa các công cụ của riêng nó. Visual Studio, ví dụ, cho phép bạn phát hiện và cách ly rò rỉ bộ nhớ trong các chương trình của bạn


6
Nó là rất ít sử dụng thực tế. Nó sẽ ghi tên tệp / vải lanh để phân bổ vi phạm, nhưng nó chỉ mang tính thông tin nếu bạn gọi trực tiếp cho malloc. Khi sử dụng new / xóa, nó sẽ vô tình xác định chính xác new.h là mã "vi phạm".
user9665

3
Nó hoạt động chính xác với tôi, chỉ đúng dòng ngay cả mới / xóa được sử dụng.
Rodrigo

Nhưng nó sẽ hoạt động nếu một chức năng thư viện phân bổ? Ví dụ: strdup.
Alex Budovski

1
Valdrind thực hiện nhiều hơn sau đó tìm thấy rò rỉ bộ nhớ, tôi chủ yếu sử dụng nó để tìm cách sử dụng ngăn xếp và bộ nhớ heap được giải phóng và không bị xóa mà có thể cực kỳ khó gỡ lỗi.
ideaman42

1
@ user9665 Trình phát hiện rò rỉ trực quan ( vld.codeplex.com ) cung cấp toàn bộ bảng gọi cho mỗi lần rò rỉ bộ nhớ với các thay đổi mã souce tối thiểu. Kiểm tra ví dụ trên trang web
KindDragon

14

Tôi muốn liệt kê một số công cụ, hy vọng sẽ hữu ích

đọc bài viết này để biết thêm chi tiết

  1. Thanh lọc
  2. Giới hạn kiểm tra
  3. Coverity (về cơ bản là một bộ phân tích mã, nhưng nó sẽ bị rò rỉ bộ nhớ trong tĩnh)
  4. Mã phát sáng
  5. dmalloc
  6. ccmalloc
  7. NJAMD
  8. YAMD
  9. Valgrind
  10. trung tâm điều trị
  11. Bảo hiểm ++


12

Có một phần Pageheap.exe của các công cụ gỡ lỗi cho Windows. Nó miễn phí và về cơ bản là bộ cấp phát / bộ phân phối bộ nhớ tùy chỉnh.

Xem http://support.microsoft.com/kb/286470


Pageheap / gflags đã giúp tôi đi đến tận cùng của một số vấn đề tham nhũng heap khó chịu.
the_mandrill

Tôi thấy gflags+ gdb(từ mingw) hữu ích trong chẩn đoán.
Jarekczek

8

Kết hợp với Visual Studio, tôi thường sử dụng Trình phát hiện rò rỉ trực quan hoặc đơn giản là _CrtDumpMemoryLeaks () là một cuộc gọi api win32. Cả hai đều không có gì lạ mắt nhưng họ hoàn thành công việc.


6

Tôi đã có cơ hội sử dụng Compuware DevPartner Studio trong quá khứ và điều đó thực sự tốt, nhưng nó khá tốn kém. Một giải pháp rẻ hơn có thể là GlowCode , tôi chỉ làm việc với phiên bản 5.x và mặc dù có một số vấn đề trong việc gắn vào một quy trình tôi cần để gỡ lỗi, nó hoạt động khá tốt.


Đắt có. Nó trả lại tiền trong một ngày cuối tuần, chỉ bằng cách sử dụng mảnh profiler.
EvilTeach



4

Xem phần " Công cụ kiểm tra nguồn liên kết " " trên trang Tài nguyên công cụ kiểm tra và kiểm tra QA phần mềm để biết danh sách các công cụ tương tự.

Tôi đã sử dụng BoundChecker, DevPartner Studio và Intel V-Tune trong quá khứ để định hình. Tôi thích V-Tune nhất; bạn có thể mô phỏng các chipset Intel khác nhau và nó sẽ cho bạn gợi ý về cách tối ưu hóa cho nền tảng đó.



3

LeakDiag, UMDH, Trình xác minh ứng dụng, DebugDiag, đều là những công cụ hữu ích để cải thiện độ mạnh của mã và tìm rò rỉ bộ nhớ.


3

Thư viện Boost Test có thể phát hiện rò rỉ bộ nhớ.





2

Nếu bạn đang phát triển với Borland / CodeGear / Embarcadero C ++ Builder, bạn có thể sử dụng CodeGuard.


2

Nhiều hơn hoặc ít hơn tất cả các Profiler bao gồm kiểm tra rò rỉ bộ nhớ và hiển thị cho bạn ngăn xếp khi bộ nhớ được phân bổ.

Tôi có thể giới thiệu Intels Parallel Inspector . Sử dụng đơn giản và không cần biên dịch lại. Phiên bản dùng thử trong 30 ngày.

GlowCodeAtromatedQA cũng bao gồm các capabilites như vậy. Tất cả họ đều cung cấp các thử nghiệm miễn phí.

Compuware DevPartner (còn gọi là BoundChecker) trong Tương phản cần biên dịch lại "công cụ" bị chậm và ứng dụng cũng chạy chậm hơn khi kiểm tra lỗi. Và BoundChecker hoàn toàn không thể hoạt động với các bản phát hành 64 Bit. Chúng tôi đã từ bỏ công cụ đó.


2
Tôi chắc chắn muốn giới thiệu glowcode. Tôi đã sử dụng nó trong quá khứ để tìm một rò rỉ bộ nhớ trong một dll được gọi bởi ứng dụng của tôi.
Bob

Đã có những phàn nàn về sự chậm chạp lớn trong khi sử dụng DevPartner tại nơi làm việc cuối cùng của tôi. Họ làm mọi cách để tránh sử dụng nó vì nó sẽ chậm như thế nào.
Calyth




2

Chúng tôi mới hoàn thành công cụ kiểm tra An toàn bộ nhớ cho Windows, xử lý GCC và Micrsoft Visual C (chưa phải C ++) và đang tìm kiếm người thử nghiệm Beta.

EDIT ngày 12 tháng 6 năm 2011: Không còn Beta nữa, hiện đang sản xuất cho GCC và Microsoft Visual Studio C.




1

Tôi đã sử dụng Insure ++, công việc tuyệt vời trong việc tìm kiếm rò rỉ / hỏng bộ nhớ c ++ và nhiều lỗi khác như biến chưa được khởi tạo, lỗi con trỏ, chuỗi, v.v. Nó cũng trực quan "Bảo hiểm mã" và chạy sử dụng bộ nhớ thời gian, v.v. mã của bạn .. Bạn có thể thử nó cho phiên bản trail ..



1

Bạn có thể dùng thử bản dùng thử RuntimeChecker cho bản dùng thử IBM Purify ..

Một giải pháp miễn phí sẽ là sử dụng mã sau trong Visual Studio:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

Chỉ cần viết điều này vào đầu tất cả các tập tin cpp của bạn. Điều này sẽ phát hiện rò rỉ bộ nhớ của ứng dụng của bạn khi dừng chạy gỡ lỗi và liệt kê chúng trong cửa sổ đầu ra. Nhấp đúp vào dòng rò rỉ bộ nhớ sẽ cho bạn biết dòng nơi bộ nhớ được phân bổ và không bao giờ được phát hành. Điều này có thể giúp bạn: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.