2016-06-28 19 views
16

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.

+0

Đố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

+2

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

+1

@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

Trả lời

13

Nó chỉ ra rằng, trên bao bì của LLVM của Ubuntu, người ta có thể nhận được số nhị phân llvm-symbolizer chưa xuất bản từ đường dẫn /usr/lib/llvm-3.x/bin, vì vậy PATH=/usr/lib/llvm-3.x/bin:$PATH [COMMAND] thực hiện thủ thuật. Tôi vẫn nghĩ rằng mặc dù thay đổi này là một hồi quy trong compiler_rt.

3

sudo ln -s /usr/bin/llvm-symbolizer-3.8/usr/bin/llvm-symbolizer

Ngoài việc cho llvm-symbolizer-4.0

(sao chép từ @Eraden bình luận)

Các vấn đề liên quan