Quando si compila con -fsanitize=memory
ottengo WARNING: Trying to symbolize code, but external symbolizer is not initialized!
durante l'esecuzione del programma. Come inizializzare il simbolizzatore esterno?Come inizializzare il simbolizzatore esterno di LLVM?
risposta
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.
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
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 .
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.
- 1. Come posso inizializzare il provider di contenuti?
- 2. Come incorporare LLVM?
- 3. Come inserire un'istruzione LLVM?
- 4. Che cos'è il contesto LLVM?
- 5. Come disinstallare LLVM?
- 6. LLVM - problema di collegamento
- 7. tipi interi di llvm
- 8. LLVM stdin/stdout/stderr
- 9. Come inizializzare l'array di classi?
- 10. Come disattivare l'assemblatore integrato di LLVM?
- 11. Come si usa llvm linker?
- 12. errori durante il tentativo di inizializzare vm_args
- 13. Come inizializzare una classe?
- 14. Come inizializzare un unique_ptr
- 15. Esecuzione dell'uscita LLVM di GHC tramite il linker del codice a barre LLVM prima
- 16. Informare il contenuto dell'ottimizzatore LLVM delle variabili
- 17. Come utilizzare il makefile esterno in Eclipse
- 18. Android: "Impossibile inizializzare il motore di visualizzazione"
- 19. Chiama il codice Python da LLVM JIT
- 20. Come inizializzare var?
- 21. Come inizializzare la struttura?
- 22. Java: come inizializzare String []?
- 23. Come devo inizializzare jQuery?
- 24. come inizializzare l'oggetto stringstream
- 25. Cosa significa "inizializzare il valore"?
- 26. Come inizializzare il logger per i test di integrazione?
- 27. Installazione di Clang/LLVM/Ubuntu
- 28. Inoltro di argomenti in LLVM
- 29. Capire il più semplice IR LLVM
- 30. Collegamento del codice JIT LLVM alle librerie statiche LLVM?