170 похожих чатов

Поиск UB в большом проекте привел к уменьшению этого проекта

до одной единицы трансляции. Никаких библиотек, кроме буста, в бинарник не включается. UB стабильно проявляется.
При этом посредством хедеров включается еще довольно много шаблонного кода. Посоветуйте, каким способом искать место UB далее? Может прогнать через статический анализатор?

30 ответов

25 просмотров

с чего вы взяли, что это UB?

Возможно скажу очевидность но ubsan пробовали?

d7d1cd- Автор вопроса
Boris Usievich
с чего вы взяли, что это UB?

Под O0 работат, под О2 при вызове виртуального метода segmentation fault.

d7d1cd- Автор вопроса
d7d1cd
Это отдельная утилита?

Это -fsanitize=undefined если кланг. https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html

d7d1cd- Автор вопроса
vitrevance
Это -fsanitize=undefined если кланг. https://clang...

У меня gcc. Да, этот флаг включал

Тогда с большой вероятностью это и не уб если код однопоточный и нет обращений к библиотеки

d7d1cd- Автор вопроса
vitrevance
Тогда с большой вероятностью это и не уб если код ...

А что это тогда? Поведение определенно не определенное 😁

d7d1cd
А что это тогда? Поведение определенно не определе...

Другие санитайзеры пробовали? Лучше вообще все одновременно (из тех что не взаимоисключающие)

d7d1cd- Автор вопроса
vitrevance
Другие санитайзеры пробовали? Лучше вообще все одн...

Имеете ввиду включать флаги в компиляторе?

Дебагером?

d7d1cd- Автор вопроса
Egor Kulebyakin
Дебагером?

Под О2 все жутко инлайнится. Если только под ассемблером идти

d7d1cd
Под О2 все жутко инлайнится. Если только под ассем...

В GCC есть атрибуты для управления инлайнингом.

d7d1cd- Автор вопроса

Можно попробовать. Но, боюсь, если запретить инлайнинг, то и ошибка скроется.

d7d1cd
Можно попробовать. Но, боюсь, если запретить инла...

Попробуй в месте падения проанализировать стек, переменные..

d7d1cd- Автор вопроса
Ilya Zviagin
Попробуй в месте падения проанализировать стек, пе...

Попробую. Падает всегда перед попыткой вызвать из базового класса виртуальный метод, который переопределен в наследнике. Причем бывает не падает, но метод не вызывается и поток исполнения оказывается вообще непонятно где. Иногда снова на 2 метода назад и тогда зацикливается.

d7d1cd
Попробую. Падает всегда перед попыткой вызвать из ...

Это скорее всего означает, что вы ранее нагадили по памяти

d7d1cd
Попробую. Падает всегда перед попыткой вызвать из ...

Ну ты учти что помочь тут никто не сможет, скорее ты сам что-то найдешь, если подумаешь хорошенько

d7d1cd
Под O0 работат, под О2 при вызове виртуального ме...

Я уже тебе говорил - ищи проблему в другом месте, самое вероятное - это ты память "портишь", выход за границы.

d7d1cd
Под O0 работат, под О2 при вызове виртуального ме...

Быть может в конструкторе производного класса некорректно вызывается конструктор базового класса?

d7d1cd- Автор вопроса
Boris Usievich
Это скорее всего означает, что вы ранее нагадили п...

Отладка под ассемблером показала, что во время очередного ret из функции, мы оказываемся черт знает где. То есть, после входа в эту функцию и перед выходом из нее кто-то гадит в стек и портит адрес возврата.

d7d1cd
Отладка под ассемблером показала, что во время оче...

100 раз уже сказали - где то портиться память, ищи в другом месте

d7d1cd
Попробую. Падает всегда перед попыткой вызвать из ...

У меня были проблемы с виртуальными вызовами, когда я поменял хедер (размер базового класса) и система сборки не все пересобрала, полную пересборку попробуй, если еще не делал

d7d1cd- Автор вопроса
Александр Водянников
100 раз уже сказали - где то портиться память, ищи...

В другом месте? Память портиться после вызова метода. В этом методе происходит вызов виртуальной функции. В функции печать в cout.

Cyan idle
У меня были проблемы с виртуальными вызовами, когд...

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

d7d1cd
В другом месте? Память портиться после вызова мето...

То есть когда метод начинает выполняться, адрес возврата верный? А когда заканчивает и хочет вернуться, уже стек испорчен?

d7d1cd- Автор вопроса

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта