Почему ASAN SYMBOLIZER PATH больше не работает с двоичными файлами, украшенными версиями
на Ubuntu 14.10,llvm-symbolizer
программа устанавливается как /usr/bin/llvm-symbolizer-3.5
. Обычно дезинфицирующее средство адреса хочет найти двоичный файл с именем llvm-symbolizer
на PATH
. Однако в качестве обходного пути можно было явно установить ASAN_SYMBOLIZER_PATH
. Итак, настройка ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.5
в среде позволит адрес дезинфицирующее средство инструментальной программы печати символизировал ошибки.
на Ubuntu 16.04,llvm-symbolizer
программа снова устанавливается с суффиксом версии, теперь как /usr/bin/llvm-symbolizer-3.8
. Однако ASAN_SYMBOLIZER_PATH
настройки больше не похоже, сработало. Запуск инструментальной программы ASAN с помощью ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.8
set в среде генерирует следующую ошибку, когда ASAN обнаруживает ошибку:
==18718==ERROR: External symbolizer path is set to '/usr/bin/llvm-symbolizer-3.8' which isn't a known symbolizer. Please set the path to the llvm-symbolizer binary or other known tool.
кто-нибудь знает, почему это поведение изменилось, или как восстановить старое поведение? Это кажется необоснованно ограничительным. Программа symbolizer, на которую я указал ASAN, определенно является известным символистом, у нее просто есть тег версии Ubuntu в конце.
обратите внимание, что настройка PATH
не помочь здесь, так как Ubuntu не корабль llvm-symbolizer
двоичный файл, который поставляется без украшений версии.
2 ответов
оказывается, что на упаковке Ubuntu LLVM можно получить unadorned llvm-symbolizer
двоичный файл из пути /usr/lib/llvm-3.x/bin
, so PATH=/usr/lib/llvm-3.x/bin:$PATH [COMMAND]
делает трюк. Я все еще думаю, что это изменение является регрессией в compiler_rt.
следующее
sudo ln -s /usr/bin/llvm-symbolizer-3.8 /usr/bin/llvm-symbolizer
также работает для llvm-symbolizer-4.0
(скопировано из комментария @Eraden)