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

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

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

30 ответов

7 просмотров

с чего вы взяли, что это 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.

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

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

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

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

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

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

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

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Народ, кто шарит в расширенных разделах (EBR/EPR) на дисках с разметками MBR? Везде пишут (в вики рус/англ) в частности + другие источники смотрел, что первый сектор расширенн...
Eugene Krasnikov (ᴊɪɴ x)
1
что насчет пагинга? на осдеве непонятно(
Vi Chapmann 🪙
26
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Карта сайта