Trên Ubuntu 14.10, chương trình llvm-symbolizer
được cài đặt là /usr/bin/llvm-symbolizer-3.5
. Thông thường, địa chỉ vệ sinh muốn tìm một tệp nhị phân có tên llvm-symbolizer
trong PATH
. Tuy nhiên, như một giải pháp thay thế, bạn có thể đặt rõ ràng ASAN_SYMBOLIZER_PATH
. Vì vậy, thiết lập ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.5
trong môi trường sẽ cho phép một chương trình khử trùng địa chỉ cụ thể hóa các lỗi biểu tượng in.Tại sao ASAN_SYMBOLIZER_PATH không còn hoạt động với phiên bản nhị phân được trang trí
Trên Ubuntu 16.04, chương trình llvm-symbolizer
được cài đặt lại với hậu tố phiên bản, hiện là /usr/bin/llvm-symbolizer-3.8
. Tuy nhiên, cài đặt ASAN_SYMBOLIZER_PATH
dường như không hoạt động nữa. Chạy một chương trình instrumented Asan với ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.8
thiết lập trong môi trường tạo ra các lỗi sau khi Asan phát hiện một lỗi:
==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.
Có ai biết lý do tại sao hành vi này thay đổi, hoặc làm thế nào để khôi phục lại các hành vi cũ? Điều này có vẻ không hợp lý. Chương trình biểu tượng tôi đã chỉ ASAN để chắc chắn là một biểu tượng được biết đến, nó chỉ xảy ra để có một phiên bản Ubuntu bắt buộc từ khóa ở cuối.
Lưu ý rằng việc điều chỉnh PATH
không giúp ích gì ở đây, vì Ubuntu không gửi mã nhị phân llvm-symbolizer
mà không có trang sức phiên bản.
Đối với bất kỳ ai khác gặp phải điều này, có vẻ như đây là kết quả của [thay đổi này trong compiler_rt] [1]. Tôi đã ping đánh giá để cố gắng xác định xem hành vi thay đổi này có được dự định hay không hoặc nếu đây là hồi quy [1]: http://reviews.llvm.org/D8285 – acm
Cách đơn giản nhất để khắc phục điều này: ' sudo ln -s /usr/bin/llvm-symbolizer-3.8/usr/bin/llvm-symbolizer' – Eraden
@Eraden Chắc chắn, nó hoạt động tốt trên hộp dev của tôi, nhưng điều này là dành cho một hệ thống CI mà tôi không thể thay đổi/usr/bin. – acm