2016-04-07 20 views
6

Per alcuni giorni ho riscontrato il seguente problema all'avvio di Address Sanitizer in Xcode 7.3. I messaggi di errore stampati sulla console Xcode quando il disinfettante trovato un problema (che è stato effettivamente soppresso da un file):Indirizzo Sanitizer Warning

== 13392 == ATTENZIONE: Non è possibile scrivere a symbolizer a fd 55

== 13392 == ATTENZIONE: Impossibile scrivere symbolizer a fd 55

== 13392 == ATTENZIONE: Impossibile scrivere symbolizer a fd 55

== 13392 == ATTENZIONE: Impossibile scrivere a symbolizer su fd 55

== 13392 == ATTENZIONE: non è stato possibile utilizzare e riavviare il simbolizzatore esterno!

Ho trovato i messaggi di errore nel repository ma non riesco ancora a spiegare cosa sta succedendo. Ovviamente la funzione di scrittura interna fallisce ma non ho idea di che cosa lo abbia causato. Qualche idea?

https://github.com/Microsoft/compiler-rt/blob/master/lib/sanitizer_common/sanitizer_symbolizer_process_libcdep.cc#L100

+0

Btw, lo stesso funziona bene in Xcode 7.2.1. Tendo a pensare che sia un bug in Xcode 7.3 – HelloWorld

risposta

3

ASAN manca dal vostro percorso. Di seguito è stato fatto fuori Xcode per vedere se potevo manifestare l'errore ed è stato facile se il percorso non fosse definito. La mia ipotesi è che XCode non riesca a trovarlo dove sta guardando o come nel caso seguente il percorso ASAN non è definito.

Quando si tenta questo se si aggiunge e rimuoverlo dal vostro percorso l'errore va via, ma i numeri di riga anche scomparire cioè se si desidera visualizzare il messaggio di errore effettivo di nuovo è necessario utilizzare

unset ASAN_SYMBOLIZER_PATH 
non

ASAN_SYMBOLIZER_PATH= 

Creare programma ac come segue ...

int main(void){ 
    int a[3]; 
    a[3] = 4; 
    return 0; 
} 

compilarlo, si prega di ignorare gli avvertimenti per ora ...

gcc -std=c11 -Wall -g3 -fno-omit-frame-pointer -fsanitize=address broken_asan_test.c 
./a.out 

Si dovrebbe vedere qualcosa di simile ...

================================================================= 
==29192==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7fff5ad1052c at pc 0x000104eefe78 bp 0x7fff5ad104f0 sp 0x7fff5ad104e8 
WRITE of size 4 at 0x7fff5ad1052c thread T0 
    #0 0x104eefe77 in atos[29193]: [fatal] 'pid_for_task' failed: (os/kern) failure (5) (+0x100000e77) 
==29192==WARNING: Can't write to symbolizer at fd 3 
    #1 0x7fff940495ac in atos[29206]: [fatal] 'pid_for_task' failed: (os/kern) failure (5) (+0x35ac) 
    #2 0x0 (<unknown module>) 

Avviso questa linea

==29192==WARNING: Can't write to symbolizer at fd 3 

Passare hanno la symbolizer aggiunto al percorso ...

export ASAN_SYMBOLIZER_PATH=/usr/local/Cellar/llvm/3.6.2/bin/llvm-symbolizer 

e l'errore scompare ...

================================================================= 
==29312==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7fff55ac450c at pc 0x00010a13be78 bp 0x7fff55ac44d0 sp 0x7fff55ac44c8 
WRITE of size 4 at 0x7fff55ac450c thread T0 
    #0 0x10a13be77 in main (/git/ghub/doc/c/./a.out+0x100000e77) 
    #1 0x7fff940495ac in start (/usr/lib/system/libdyld.dylib+0x35ac) 
    #2 0x0 (<unknown module>) 
+0

Grazie. Come hai detto, il problema è causato dal percorso mancante. Sembra che gli strumenti da riga di comando per xcode 7.3 siano interrotti. L'ho segnalato ad Apple. Passare nuovamente a Xcode 7.2.1 (tramite la finestra di dialogo delle opzioni di Xcode) in Xcode 7.3 lo fa funzionare di nuovo. Ricostruzione necessaria però. – HelloWorld