Дополнительный вывод из программы, построенной с помощью дезинфицирующего средства UB Clang

На Трэвисе CI, где я использую clang version 3.4 (tags/RELEASE_34/final) который уже установлен, я строю свой код с этим:

clang++ main.cpp -m64 -fsanitize=undefined -Werror -std=c++98 -pedantic -pedantic-errors -fvisibility=hidden -fstrict-aliasing -Weverything -Qunused-arguments -fcolor-diagnostics -O3 -DNDEBUG

(эта команда получена из compile_commands.json который генерируется из cmake)

И в выходных данных после выхода из программы появляются некоторые числа (например, шестнадцатеричное представление памяти):

00 00 00  10 70 fb 01 00 00 00 00  10 70 fb 01

Я предполагаю, что это из дезинфицирующего средства UB, потому что, когда я строю с ASAN или вообще без дезинфицирующего средства, эти цифры отсутствуют.

Так что они имеют в виду? Как мне диагностировать мою ошибку UB (если это действительно так)?

Я думал, что когда дезинфицирующее средство встречает ошибку, оно вылетает из программы и печатает большое сообщение с объяснением. и что это?

Для меня это прерыватель сделки, потому что я сравниваю справочный вывод в текстовом файле с выводом программы из текущей сборки, и такой дополнительный вывод нарушает все.

Я попытался локально, используя Clang 3.6, который по умолчанию для моего Ubuntu использует ту же команду сборки, но когда я запускаю исполняемый файл, я не получаю ошибок или такого дополнительного вывода.

Вот это неудачная сборка на travis — и я не думаю, что мой код актуален, потому что моя проблема в том, что вывод дезинфицирующего средства вообще не помогает.

3

Решение

Я также включил сборки с помощью clang 3.5 / 3.6 / 3.7 / 3.8 и оказалось, что clang 3.5 ведет себя так же …

Clang 3.6 однако дает больше продукции!

  20 6c 98 01 00 00 00 00  20 6c 98 01 00 00 00 00  20 6c 98 01
^
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/stl_tree.h:247:17: runtime error: upcast of address 0x00000115e090 with insufficient space for an object of type 'std::_Rb_tree_node<doctest::detail::TestData>'
0x00000115e090: note: pointer points here
00 00 00 00  00 00 00 00 00 00 00 00  20 6c 98 01 00 00 00 00  20 6c 98 01 00 00 00 00  20 6c 98 01

clang 3.7 и 3.8 дают тот же результат, что и 3.6

я использую libstdc++ поэтому я переключусь на libc++ надеюсь удалить эту ошибку (которая, я думаю, не из моего кода!)

Я использовал простой TestData структура внутри std::set<>

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]