Clang có nhiều chất khử trùng khác nhau có thể được bật để phát hiện sự cố khi chạy.
Tuy nhiên, có một số chất khử trùng mà tôi không thể sử dụng cùng nhau. Tại sao vậy?Tại sao bạn không thể kích hoạt tất cả các chất vệ sinh?
clang++-3.9 -std=c++1z -g -fsanitize=memory -fsanitize=address -o main main.cpp 1
clang: error: invalid argument '-fsanitize=address' not allowed with '-fsanitize=memory'
Đó không phải là vấn đề lớn, nhưng khi chạy thử nghiệm đơn vị, phải mất nhiều thời gian hơn, vì tôi đã tạo nhiều tệp nhị phân cho cùng một thử nghiệm và chạy riêng từng thử nghiệm.
clang++-3.9 -std=c++1z -g -fsanitize=address -o test1 test.cpp
clang++-3.9 -std=c++1z -g -fsanitize=memory -fsanitize=undefined -o test2 test.cpp
Tôi đoán là, một số thiết bị đo đạc không tương thích - ví dụ: thiết bị đo đạc cho một chất khử trùng sẽ dẫn đến kết quả dương tính giả hoặc âm tính sai ở một chất khử trùng khác. Nhưng tôi cũng rất quan tâm đến các chi tiết kỹ thuật. – MikeMB
"khi tôi chạy thử nghiệm đơn vị của mình, phải mất nhiều thời gian hơn" -> có vẻ như bạn không sử dụng '-O'. '-O1' là an toàn để sử dụng với bộ khử trùng bộ nhớ và sẽ không làm hỏng stacktraces (ngoài đuôi gọi) – viraptor
@ viraptor Cảm ơn, đó là một điểm tốt. Tôi đã đề cập đến thời gian biên dịch thực tế. Xây dựng nhiều tệp nhị phân để kiểm tra các thành phần phần mềm giống nhau. –