2014-06-10 11 views

Trả lời

12

tôi giải quyết vấn đề của riêng tôi sử dụng MSAN_SYMBOLIZER_PATH=$(which llvm-symbolizer-3.4) ./a.out. Vấn đề là Ubuntu postfixes số phiên bản nhưng nhị phân không biết điều đó. Tất nhiên bạn cần phải sử dụng MSAN thay vì ASAN khi sử dụng bộ khử trùng bộ nhớ.

2

Bạn có nghĩa vụ có thể đặt biến môi trường ASAN_FILTER để trỏ vào một biểu tượng, nhưng tôi không thể làm cho nó hoạt động. Tuy nhiên, bạn có thể chuyển hướng stderr vào một biểu tượng sau khi thực tế. Bạn vẫn sẽ nhận được cảnh báo về biểu tượng không được khởi tạo, nhưng tên tệp và số dòng sẽ chính xác.

Bạn có thể sử dụng asan_symbolizer.py làm biểu tượng bên ngoài. Sau khi tải về nó từ liên kết đó (đến/tmp, ví dụ), gọi chương trình của bạn như vậy (trong bash, ví dụ này):

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

Tôi nhận được cảnh báo như vậy khi chạy phiên bản gỡ lỗi chương trình (được biên dịch bằng -fsanitize=address) trên máy Linux không chứa cài đặt clang. Sự cố đã biến mất sau khi tôi cài đặt clang từ .

0

Trên hệ thống Ubuntu của tôi, vấn đề là các công cụ của LLVM được cài đặt theo /usr/bin với hậu tố phiên bản (như llvm-symbolizer-4.0) và các công cụ vệ sinh đang tìm kiếm chúng mà không có hậu tố phiên bản.

LLVM cũng cài đặt các tệp nhị phân của nó, ví dụ: /usr/lib/llvm-4.0/bin; các công cụ dưới /usr/bin thực ra chỉ là các liên kết tượng trưng. Vì vậy, một giải pháp dễ dàng là thêm thư mục /usr/lib/llvm-*/bin thích hợp vào đường dẫn của bạn khi làm việc với các chất khử trùng.

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