2012-08-04 10 views
11

Mi intención es usar Clang como reemplazo de Valgrind en Windows para encontrar desbordamientos de búfer, uso indebido de memoria dinámica, etc. en programas C/C++ que he escrito. He creado Clang con éxito siguiendo las instrucciones provistas en here.Clang with -faddress-sanitizer en Windows

he tratado de compilar un programa simple en C con la opción -faddress-desinfectante (como se especifica here) y el siguiente error se lanza -

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) 

¿Por qué se cling (como yo lo entiendo) invocando GCC ? Por supuesto, GCC no admite la opción -faddress-sanitizer.

Estoy muy entusiasmado con la posibilidad de usar esto ya que he estado tratando de encontrar un buen sustituto (gratuito) para Valgrind por un tiempo. ¿Puede ayudarme alguien, por favor?

Respuesta

6

Google me trajo al this page.

Para cita,

AddressSanitizer está soportado sobre

  • x86_64 Linux (probado en Ubuntu 10.04).
  • MacOS 10.6 y 10.7 (i386/x86_64).

Soporte para Linux i386/ARM está en progreso (puede funcionar, pero no se garantiza también).


Sobre el tema de la sustitución, ¿Has mirado en Dr. Memory?

+0

Gracias, pero parece que Address Sanitizer debería funcionar en Windows de acuerdo con [this] (http://code.google.com/p/address-sanitizer/wiki/WindowsPort). Recientemente le di una oportunidad al Dr. Memory, no detectó desbordamientos de búfer, pero detectó lecturas no inicializadas en la memoria. La característica más importante que estoy buscando es la detección de desbordamiento de búfer. – thegreendroid

+0

¿Siguió esas instrucciones completamente? – oldrinb

+0

Intenté pero me detuve porque las instrucciones usan MSVC para compilar el desinfectante de direcciones. Estoy usando MinGW32. – thegreendroid