2012-08-04 24 views
11

Mục đích của tôi là sử dụng Clang để thay thế cho Valgrind trên Windows để tìm tràn bộ nhớ, sử dụng sai bộ nhớ động vv trong các chương trình C/C++ mà tôi đã viết. Tôi đã xây dựng thành công Clang theo các hướng dẫn được cung cấp here.Clang with -faddress-sanitizer trên Windows

Tôi đã cố gắng để biên dịch một chương trình C đơn giản với tùy chọn -faddress-khử trùng (theo quy định here) và sau khi lỗi được ném -

gcc.exe: error: unrecognized command line option '-faddress-sanitizer' 
Using built-in specs. 
COLLECT_GCC=C:/MinGW/bin/gcc.exe 
Target: mingw32 
Configured with: ../gcc-4.7.0/configure --enable-languages=c,c++,ada,fortran,objc,obj-  c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgomp --disable-win32-registry --enable-libstdcxx-debug --disable-build-poststage1-with-cxx --enable-version-specific-runtime-libs --build=mingw32 --prefix=/mingw 
Thread model: win32 
gcc version 4.7.0 (GCC) 
clang: error: assembler (via gcc) command failed with exit code 1 (use -v to see invocation) 

Tại sao Clang (như tôi hiểu nó) gọi GCC ? Tất nhiên GCC không hỗ trợ tùy chọn -faddress-sanitizer.

Tôi thực sự vui mừng trước khả năng sử dụng điều này vì tôi đã cố gắng tìm một giải pháp thay thế (miễn phí) tốt cho Valgrind trong một thời gian. Ai đó có thể giúp đỡ?

Trả lời

2

AddressSanitizer hoạt động tốt hơn nhiều trên Windows những ngày này (nhưng vẫn còn một chút công việc đang tiến hành). Có một số tài liệu tại số https://github.com/google/sanitizers/wiki/AddressSanitizerWindowsPort

+0

Liên kết không hoạt động nữa. –

+1

Tôi đã sửa liên kết ngay bây giờ để trỏ đến https: // github.com/google/sanitizers/wiki/AddressSanitizerWindowsPort – milianw

6

Googling đưa tôi đến this page.

Để báo giá,

AddressSanitizer được hỗ trợ trên

  • Linux x86_64 (thử nghiệm trên Ubuntu 10.04).
  • MacOS 10.6 và 10.7 (i386/x86_64).

Hỗ trợ cho Linux i386/ARM đang được tiến hành (có thể hoạt động, nhưng cũng không được đảm bảo).


Về chủ đề của sự thay thế, có bạn nhìn Dr. Memory?

+0

Cảm ơn nhưng có vẻ như Địa chỉ Sanitizer sẽ hoạt động trên Windows theo [this] (http://code.google.com/p/address-sanitizer/wiki/WindowsPort). Tôi đã cung cấp cho Dr. Memory một thử gần đây, nó đã không bắt tràn bộ đệm nhưng nó đã bắt uninitialized lần đọc trong bộ nhớ. Các tính năng quan trọng nhất tôi là sau khi phát hiện tràn bộ đệm. – thegreendroid

+0

Bạn đã làm theo hướng dẫn đầy đủ chưa? – oldrinb

+0

Tôi đã cố gắng nhưng dừng lại vì hướng dẫn sử dụng MSVC để biên dịch địa chỉ vệ sinh. Tôi đang sử dụng MinGW32. – thegreendroid