Сбой Sanitizer внутри libc++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Сбой Sanitizer внутри libc++

Сообщение Anonymous »

Немного предыстории:
Разработчики нашей команды используют в основном компьютеры Mac, а на целевых серверах работает Ubuntu. После того, как мы столкнулись с тонкими различиями в компиляторе и библиотеках между платформами, мы решили стандартизировать LLVM 17 по всем направлениям (clang, libc++, lldb, все работает).
До этого я использовал Apple Clang из инструментов командной строки Xcode и до сих пор установил его. После перехода я использую LLVM@17 от Homebrew
Продукт состоит из кода C++, связанного с несколькими сторонними библиотеками (grpc, redis, pqxx и т. д.), которые также были собраны локально из источник с использованием тех же инструментов. Наш код скомпилирован как -std=c++23, но некоторые библиотеки были скомпилированы в соответствии с предыдущим стандартом из-за несовместимости.
Проблема:
При создании исполняемого файла с помощью дезинфицирующих средств и его локальном запуске происходит сбой со следующим выводом:
/opt/homebrew/opt/llvm@17/bin/../include/c++/v1/__charconv/from_chars_integral.h:46:16: runtime error: call to function std::__1::from_chars_result std::__1::__from_chars_atoi[abi:ue170006](char const*, char const*, unsigned long long&) through pointer to incorrect function type 'std::from_chars_result (*)(const char *, const char *, unsigned long long &)'
(server:arm64+0x10083d154): note: std::__1::from_chars_result std::__1::__from_chars_atoi[abi:ue170006](char const*, char const*, unsigned long long&) defined here
#0 0x1011a4df4 in std::__1::from_chars_result std::__1::__sign_combinator[abi:ue170006](char const*, char const*, long long&, std::__1::from_chars_result (*)(char const*, char const*, unsigned long long&))+0x278 (server:arm64+0x1011a4df4)
#1 0x1011a4a7c in std::__1::from_chars_result std::__1::__from_chars_atoi[abi:ue170006](char const*, char const*, long long&)+0x188 (server:arm64+0x1011a4a7c)
#2 0x102730a90 in pqxx::internal::integral_traits::from_string(std::__1::basic_string_view)+0x54 (server:arm64+0x102730a90)
#3 0x100748320 in long long pqxx::from_string(std::__1::basic_string_view)+0x1b4 (server:arm64+0x100748320)
[... more stack frames here ...]
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /opt/homebrew/opt/llvm@17/bin/../include/c++/v1/__charconv/from_chars_integral.h:46:16 in
< /code>
Нет таких ошибок при запуске исполняемого файла без дезинфицирующих средств. серверы, среда сборки или разработки, использующие WSL2 под Windows)
Мысли:

Я подозреваю, что это может иметь Что -то связано с исполняемым загрузкой двух версий библиотек ABI Libc ++ и Libc ++ (Apple/Xcode и Homebrew/LLVM). может видеть, что оба загружены: < /p>
Stop reason: Function type mismatch
Stop reason: signal SIGABRT
image list
[ 0] 4C4C44F0-5555-3144-A1BA-7CD98681E0B4 0x0000000100000000 /Users/oren/work/server-2/build/server/server
[ 1] 4CE86D18-F3FA-3D2A-A1B8-E7CD8A52FB0D 0x000000018c0de000 /usr/lib/dyld
[ 2] 86BB7A29-1B92-38E5-A47D-7AD8FA8E9C19 0x00000001127bc000 /opt/homebrew/Cellar/llvm@17/17.0.6/lib/c++/libc++.1.0.dylib
[ 3] 59CB7CE8-1EB3-3DBE-98C8-DB08E836312D 0x0000000112c64000 /opt/homebrew/Cellar/llvm@17/17.0.6/lib/clang/17/lib/darwin/libclang_rt.asan_osx_dynamic.dylib
... more lines ...
[ 42] 17A73968-9D77-3CC1-8382-84292D845617 0x0000000199fed000 /usr/lib/system/libunwind.dylib
[ 47] 6477CE88-B069-395C-B258-7C6162AD5257 0x000000018c407000 /usr/lib/libc++abi.dylib
[ 48] 6CCA803C-BBBE-3265-889E-AF4F60CAFD5D 0x000000026bee9000 /usr/lib/liboah.dylib
[ 49] FE5F2FBB-D3B5-30BC-BAD8-3571AC2A72A0 0x000000018c379000 /usr/lib/libc++.1.dylib
... many more lines ...
[301] 7AA0CBE1-6414-34F0-AE51-1071BE00C574 0x00000001125e0000 /opt/homebrew/Cellar/llvm@17/17.0.6/lib/c++/libc++abi.1.0.dylib

Кроме того, когда отладчик загружает программу, он жалуется на ошибки динамического приведения:
2025-01-23 14:13:13.845486-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. St9type_info, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv117__class_type_infoE.
2025-01-23 14:13:13.846495-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N10__cxxabiv117__class_type_infoE, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv120__si_class_type_infoE.
2025-01-23 14:13:13.846507-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N10__cxxabiv117__class_type_infoE, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv120__si_class_type_infoE.
2025-01-23 14:13:13.846718-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N10__cxxabiv117__class_type_infoE, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv120__si_class_type_infoE.
2025-01-23 14:13:13.846814-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N10__cxxabiv117__class_type_infoE, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv120__si_class_type_infoE.
2025-01-23 14:13:13.847835-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. St9type_info, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv117__class_type_infoE.
2025-01-23 14:13:13.851894-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N10__cxxabiv117__class_type_infoE, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv120__si_class_type_infoE.
2025-01-23 14:13:13.852247-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. St9type_info, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv117__class_type_infoE.
2025-01-23 14:13:13.888734-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N10__cxxabiv117__class_type_infoE, N10__cxxabiv121__vmi_class_type_infoE, N10__cxxabiv121__vmi_class_type_infoE.
2025-01-23 14:13:13.915920-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. St9type_info, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv117__class_type_infoE.
[... program log entries here ...]
2025-01-23 14:13:14.010867-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N10__cxxabiv117__class_type_infoE, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv120__si_class_type_infoE.
/opt/homebrew/opt/llvm@17/bin/../include/c++/v1/__charconv/from_chars_integral.h:46:16: runtime error: call to function std::__1::from_chars_result std::__1::__from_chars_atoi[abi:ue170006](char const*, char const*, unsigned long long&) through pointer to incorrect function type 'std::from_chars_result (*)(const char *, const char *, unsigned long long &)'
(server:arm64+0x10083d154): note: std::__1::from_chars_result std::__1::__from_chars_atoi[abi:ue170006](char const*, char const*, unsigned long long&) defined here
#0 0x1011a4df4 in std::__1::from_chars_result std::__1::__sign_combinator[abi:ue170006](char const*, char const*, long long&, std::__1::from_chars_result (*)(char const*, char const*, unsigned long long&))+0x278 (server:arm64+0x1011a4df4)
#1 0x1011a4a7c in std::__1::from_chars_result std::__1::__from_chars_atoi[abi:ue170006](char const*, char const*, long long&)+0x188 (server:arm64+0x1011a4a7c)
#2 0x102730a90 in pqxx::internal::integral_traits::from_string(std::__1::basic_string_view)+0x54 (server:arm64+0x102730a90)
#3 0x100748320 in long long pqxx::from_string(std::__1::basic_string_view)+0x1b4 (server:arm64+0x100748320)
[... more stack frames here ...]
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /opt/homebrew/opt/llvm@17/bin/../include/c++/v1/__charconv/from_chars_integral.h:46:16 in
< /code>
Эти динамические ошибки отливки также не появляются, когда я строю исполняемый файл без дезинфицирующих средств. Хотя простое включение дезинфицирующих средств может нести ответственность за крушение, это не объяснило бы, почему это никогда не происходит на Ubuntu. Библиотеки под другой версией стандарта C ++ - виноваты. MacOS 15.2 (и также обновляется инструменты xcode и командной строки Xcode).
и исключить отладчик как виновник, аварий также происходит при запуске программы из оболочки.
Я в настоящее время отключил дезинфицирующие средства для локальных сборок, но я бы предпочел исправить (или обойти). :
Здание использует этот фрагмент cmake:
if(ASAN_ENABLED)
set(SANITIZE_FLAGS "-fsanitize=address")
set(SANITIZE_FLAGS "${SANITIZE_FLAGS} -fsanitize=undefined") # Undefined behaviour
set(SANITIZE_FLAGS "${SANITIZE_FLAGS} -fsanitize=local-bounds,unsigned-integer-overflow,implicit-conversion,float-divide-by-zero")
set(SANITIZE_FLAGS "${SANITIZE_FLAGS} -fsanitize-ignorelist=${CMAKE_SOURCE_DIR}/CMake/ignorelist.txt") # suppressions
set(SANITIZE_FLAGS "${SANITIZE_FLAGS} -fno-sanitize-recover=all") # crash on violations
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZE_FLAGS}")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fno-optimize-sibling-calls")
endif()


Подробнее здесь: https://stackoverflow.com/questions/793 ... nside-libc
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»