macos clang sanitizer address-sanitizer

macos - Clang Address Sanitizer en OS X



address-sanitizer (3)

Address Sanitizer se ha agregado como una nueva característica en Xcode 7.

Use el indicador de Enable Address Sanitizer en Runtime Sanitization > Enable Address Sanitizer en su esquema para habilitar la opción.

git mostrará este cambio en su archivo .xcscheme :

enableAddressSanitizer = "YES"

De las Nuevas Características en el documento Xcode 7 :

Desinfectante de direcciones. Xcode 7 puede construir su aplicación con instrumentación diseñada para detectar y depurar daños en la memoria utilizando el desinfectante de direcciones.

Los códigos Objective-C y C son susceptibles a problemas de corrupción de memoria, como el exceso de búfer de pila y pila y problemas de uso después de liberarse. Cuando se producen estas violaciones de memoria, su aplicación puede fallar de forma impredecible o mostrar un comportamiento extraño. Los problemas de corrupción de memoria son difíciles de rastrear debido a que los bloqueos y el comportamiento extraño a menudo son difíciles de reproducir y la causa puede estar lejos del origen del problema.

Habilita el desinfectante de direcciones en el esquema de construcción. Una vez habilitada, la instrumentación incorporada está incorporada en la aplicación para detectar las violaciones de memoria inmediatamente, lo que le permite inspeccionar el problema en el lugar donde ocurre. También se proporciona otra información de diagnóstico, como la relación entre la dirección defectuosa y un objeto válido en el montón y la información de asignación / desasignación, que le ayuda a identificar y solucionar el problema rápidamente.

El desinfectante de direcciones es eficiente, lo suficientemente rápido para ser usado regularmente, así como con aplicaciones interactivas. Es compatible con OS X, en el simulador y en dispositivos iOS.

Me gustaría usar Clang Address Sanitizer en OSX Mountain Lion, porque Valgrind tiene problemas con la comprobación de memoria en esta plataforma. Pero cuando tuve la -fsanitize=address durante el tiempo de compilación (como veo en esta página: http://clang.llvm.org/docs/AddressSanitizer.html ), obtuve este error: clang: error: argument unused during compilation: ''-fsanitize=address''

Entonces, mi pregunta es ¿cómo usar Clang Address Sanitizer en OS X? Si no puedo usarlo, ¿qué herramienta puedo usar?

He descargado el clang con Xcode y está actualizado. (Tal vez esta versión no tiene una versión de desinfectante de direcciones con ella)


De acuerdo con la fuente (en particular, si clang-425.0.24 paquete clang-425.0.24 del sitio de código abierto de Apple , el archivo de prueba src/tools/clang/test/Driver/darwin-asan-nofortify.c :

// rdar://11496765, rdar://12417750 // -faddress-sanitizer is not currently supported. // XFAIL: *

Y, por supuesto, hay un error al utilizar -faddress-sanitizer , por lo que parece que en OS X, tendrá que crear un Clang desde una fuente más reciente para obtener el desinfectante de direcciones.

Opción de línea de comando

Intente usar -faddress-sanitizer lugar de -fsanitize=address . La versión de Apple parece estar basada en una versión anterior de CLANG, y si ejecuta clang --help , los desinfectantes se encuentran de esta forma en esta versión.