2014-06-10 17 views

risposta

12

ho risolto il mio problema utilizzando MSAN_SYMBOLIZER_PATH=$(which llvm-symbolizer-3.4) ./a.out. Il problema è che Ubuntu postfix il numero di versione ma il binario non lo sa. Naturalmente è necessario utilizzare MSAN invece di ASAN quando si utilizza il disinfettante memoria.

2

Si suppone di essere in grado di impostare la variabile d'ambiente ASAN_FILTER per puntare a uno symbolizer, ma non riuscivo a farlo funzionare. Tuttavia, è possibile reindirizzare lo stderr in un simbolizzatore dopo il fatto. Riceverai comunque gli avvertimenti sul simbolizzatore non inizializzato, ma i nomi dei file e delle linee saranno corretti.

È possibile utilizzare asan_symbolizer.py come symbolizer esterna. Dopo aver scaricato da questo link (a/tmp, per esempio), richiamare il programma in questo modo (in bash, per questo esempio):

./myprogram 2>&1 | /tmp/asan_symbolize.py | c++filt 
0

Ho ricevuto questo avviso quando eseguo la versione di debug del programma (compilata con -fsanitize=address) su un computer Linux che non conteneva l'installazione clang. Il problema è scomparso dopo aver installato clang da .

0

Sul mio sistema Ubuntu, il problema è che gli strumenti di LLVM sono installati sotto /usr/bin con suffissi di versione (come llvm-symbolizer-4.0), e gli strumenti di disinfestazione li stanno cercando senza suffissi di versione.

LLVM installa anche i suoi binari, ad esempio, /usr/lib/llvm-4.0/bin; gli strumenti sotto /usr/bin sono in realtà solo collegamenti simbolici. Quindi una soluzione facile è quello di aggiungere la directory appropriata /usr/lib/llvm-*/bin al percorso quando si lavora con disinfettanti.