2012-08-04 1 views
11

Я намерен использовать Clang в качестве замены для Valgrind в Windows, чтобы найти переполнение буфера, злоупотребление динамической памятью и т. Д. В программах на C/C++, которые я написал. Я успешно построил Clang в соответствии с приведенными инструкциями here.Clang with -faddress-sanitizer на Windows

Я попытался составить простую программу C с опцией -faddress-дезинфицирующее (как указано here) и следующая ошибка брошена -

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) 

Почему лязг (как я понимаю) применение GCC ? Конечно, GCC не поддерживает параметр -faddress-sanitizer.

Я очень рад возможности использовать это, поскольку я пытался найти хорошую (бесплатную) замену Valgrind на некоторое время. Кто-то может помочь?

ответ

2

В настоящее время AddressSanitizer работает намного лучше в Windows (но он все еще немного работает в процессе). Есть некоторая документация по адресу https://github.com/google/sanitizers/wiki/AddressSanitizerWindowsPort

+0

Ссылка больше не работает. –

+1

Я установил ссылку сейчас, чтобы указать на https: // github.ком/Google/дезинфицирующие/вики/AddressSanitizerWindowsPort – milianw

6

Googling привел меня к this page.

процитировать,

AddressSanitizer поддерживается на

  • Linux x86_64 (проверено на Ubuntu 10.04).
  • MacOS 10.6 и 10.7 (i386/x86_64).

Поддержка Linux i386/ARM выполняется (может работать, но не гарантируется).


На тему замены, вы смотрели на Dr. Memory?

+0

Спасибо, но, похоже, адрес Sanitizer должен работать на Windows согласно [this] (http://code.google.com/p/address-sanitizer/wiki/WindowsPort). Недавно я попросил Dr. Memory попробовать, но он не перехватил переполнение буфера, но в памяти он не читал неинициализированные чтения. Единственная самая важная функция, которой я занимаюсь, - это обнаружение переполнения буфера. – thegreendroid

+0

Вы полностью выполнили эти инструкции? – oldrinb

+0

Я попытался, но остановился, потому что в инструкциях используется MSVC для компиляции дезинфицирующего средства адреса. Я использую MinGW32. – thegreendroid