Ответ 1
AddressSanitizer работает намного лучше в Windows в эти дни (но он все еще немного работает в процессе). Там есть документация на https://github.com/google/sanitizers/wiki/AddressSanitizerWindowsPort
Я намерен использовать Clang
для замены Valgrind
в Windows, чтобы найти переполнение буфера, неправильное использование динамической памяти и т.д. в программах на C/С++, которые я написал. Я успешно создал Clang в соответствии с инструкциями здесь.
Я попытался скомпилировать простую C-программу с параметром -faddress-sanitizer (как указано здесь), и следующая ошибка вызывается -
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)
Почему clang (как я понимаю) вызывает GCC? Конечно, GCC не поддерживает параметр -faddress-sanitizer.
Я очень рад возможности использовать это, поскольку я пытался найти хорошую (бесплатную) замену Valgrind на некоторое время. Кто-нибудь может помочь?
AddressSanitizer работает намного лучше в Windows в эти дни (но он все еще немного работает в процессе). Там есть документация на https://github.com/google/sanitizers/wiki/AddressSanitizerWindowsPort
Googling привел меня к этой странице.
Чтобы процитировать,
AddressSanitizer поддерживается на
- Linux x86_64 (протестирован на Ubuntu 10.04).
- MacOS 10.6 и 10.7 (i386/x86_64).
Поддержка Linux i386/ARM выполняется (может работать, но также не гарантируется).
На тему замены вы посмотрели Dr. памяти?