2014-06-10 88 views

回答

12

我使用MSAN_SYMBOLIZER_PATH=$(which llvm-symbolizer-3.4) ./a.out解決我自己的問題。問題是Ubuntu後綴版本號,但二進制文件不知道。當然,在使用記憶清潔劑時,您需要使用MSAN而不是ASAN

2

你應該能夠設置ASAN_FILTER環境變量指向一個符號器,但我無法讓它工作。但是,事實之後,您可以將stderr重定向到符號化程序。您仍然會收到關於未初始化符號的警告,但文件名和行號將是正確的。

您可以使用asan_symbolizer.py作爲外部符號器。從該鏈接下載它(到/ tmp爲例)後,調用你的程序像這樣(在bash,在這個例子中):

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

當我在不包含clang安裝的Linux機器上運行程序調試版本(編譯爲-fsanitize=address)時,我收到了這樣的警告。從安裝clang後,問題消失。

0

在我的Ubuntu系統上,問題是LLVM的工具安裝在/usr/bin的版本後綴(如llvm-symbolizer-4.0),並且殺毒工具正在尋找它們而沒有版本後綴。

LLVM還將其二進制文件安裝到例如/usr/lib/llvm-4.0/bin; /usr/bin下的工具實際上只是符號鏈接。所以一個簡單的解決方案是在使用消毒劑時將適當的/usr/lib/llvm-*/bin目錄添加到您的路徑中。