2016-06-29 19 views
6

Attualmente esegue llvm, clang, clang-format e clang-modernize su Ubuntu Bash su Windows. Vorrei utilizzare il set di strumenti di sanitizzazione rilasciato da google, inclusi indirizzo, memoria e sanitizzazione dei thread. Nessuna delle opzioni fsanitize sembra funzionare.disinfettante per indirizzi non funziona con bash su windows

Ecco il codice di esempio per ASAN:

#include <stdlib.h> 
int main() { 
    char *x = (char *)malloc(10 * sizeof(char *)); 
    free(x); 
    return x[5];// purposely accessing deallocated memory 
} 

Ecco la chiamata clang in bash su Windows:

$clang++-3.5 -fsanitize=address -o1 -fno-omit-frame-pointer -g main.cpp -o main 
$./main 

Risultati

==70==Sanitizer CHECK failed: build/buildd/llvm-toolchain-snapshot-3.5/projects/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_linux.cc:211 ((IsOneOf(*current_, 's', 'p'))) != (0)(0,0) 

avevo suggerimenti amore su come farlo funzionare o se mi manca parte della catena di strumenti o qualcosa del genere.

In caso contrario, suppongo che avrò un doppio avvio di Ubuntu o Debian, perché clang per Windows non ha funzionalità semplici come il supporto std: out, anche se idealmente mi piacerebbe essere in grado di compilare sia per i target Windows che per i target Linux. Mi piacerebbe evitare il dual-boot anche se Ubuntu non è in grado di montare gli spazi di archiviazione di Windows, ma sembrano essere serviti a Ubuntu bash su Windows abbastanza bene.

risposta

2

Fare una rapida occhiata al codice sorgente - MemoryMappingLayout :: Successivo - https://llvm.org/svn/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps_linux.cc - Sembra che il problema sia che bash su ubuntu sul supporto di Windows per il filesystem/proc sia incompleto.

Il codice che non funziona è guardando/proc/self/maps - che in realtà - sembra avere ragione.

Ma ho trovato altre cose (ad esempio il networking) in/proc completamente interrotte su bashonwindowsonunix - quindi sono abbastanza sicuro che la parte è un work in progress.