Re[22]: C++ illegal instruction
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.08.25 18:16
Оценка:
Здравствуйте, serg_joker, Вы писали:

Pzz>>Похоже, в плане Б не хватает действия на случай, если программа падает без какого-либо прогресса.

_>Да, что? Как после смерти программы чем-то внешним понять почему в общем случае она вперёд не двигается?

Пусть она сама скажет, что сдвинулась.

_>Автоматический откат не всегда поможет, т.к. это же комбинация версии и входных данных. Вохможно, этот ассёрт был воткнут 10 версий назад, просто в эту ветку не заходило.


Ну, программа стала колом сразу после обновления. Совпадение возможно, но всё же не слишком вероятно.

В любом случае, предыдущая версия считается условно рабочей. Хуже точно не станет.
Re[23]: C++ illegal instruction
От: serg_joker Украина  
Дата: 13.08.25 18:49
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Пусть она сама скажет, что сдвинулась.

Так проблема не в том, сдвинулась/не сдвинулась, а почему и что с этим делать. Плохое сообщение в кафке? Что-то не то из базы взяли, сигналинг по управляющему протоколу?
Ну и там "почему" был кривой код, внешнее событие только тригернуло его. И если бы этот плохой код (неверный ассёршн) не валил программу, то всё бы и работало, причём правильно.
В нашем случае мы решили, что безопаснее в будущем на проде нарушение утверждений документировать, но не валить программу. Поверь, тому предшествовало обсуждение, что для нас лучше.

_>>Автоматический откат не всегда поможет, т.к. это же комбинация версии и входных данных. Вохможно, этот ассёрт был воткнут 10 версий назад, просто в эту ветку не заходило.


Pzz>Ну, программа стала колом сразу после обновления. Совпадение возможно, но всё же не слишком вероятно.

Колом стала не сразу после обновления, а через какое-то значительное время. Врать не буду что именно так и было, но вполне возможно, что версий накатили не одну.

Pzz>В любом случае, предыдущая версия считается условно рабочей. Хуже точно не станет.

Опсы так и поступают, у нас апгрейд планируется загодя, сначала на стейджинге у клиента. Потом на проде и агрессивно мониторится сутки-двое. Если что не так — откат.
Re[2]: C++ illegal instruction
От: ononim  
Дата: 14.08.25 18:31
Оценка: +2
А>> раньше было неопределённое поведение.
Pzz>gcc туда лепит UD2
Прогресс, раньше просто проваливался дальше по коду: https://rsdn.org/forum/cpp.applied/8103918.flat
Автор: ononim
Дата: 30.09.21
Как много веселых ребят, и все делают велосипед...
Re[18]: C++ illegal instruction
От: alpha21264 СССР  
Дата: 15.08.25 13:41
Оценка: :))
Здравствуйте, rg45, Вы писали:

A>>Почему-то тебя это не волнует, когда новый кумпилятор ложит в корку программу, которая нормально работала до этого.


R>В твоем случае "нормальная" работа программы была всего лишь частным случаем проявления неопределённого поведения. Но суть неопределённого поведения в том-то и состоит, что ни на какое определённое поведение ты рассчитывать не можешь. Вчера она работала так, а сегодня по-другому. UB — оно в Африке UB.


Это ты чё мне сейчас рассказываешь? Твой "символ веры"? Ну я не верю в эту веру.
Тем более, что в данном случае она просто очевидно неверна.
Функция возвращала неинициализированное булевское значение, которое потом нигде не использовалось.
Где (тут матерное ругательство) здесь неопределённое поведение?!
Здесь совершенно определённое поведение — программа, выполнив эту функцию, выполняется дальше.

А идиотский компилятор положил программу в корку. Потому что возомнил, что он умнее программиста.

Течёт вода Кубань-реки куда велят большевики.
Re[19]: C++ illegal instruction
От: rg45 СССР  
Дата: 15.08.25 13:43
Оценка: +3
Здравствуйте, alpha21264, Вы писали:

R>>В твоем случае "нормальная" работа программы была всего лишь частным случаем проявления неопределённого поведения. Но суть неопределённого поведения в том-то и состоит, что ни на какое определённое поведение ты рассчитывать не можешь. Вчера она работала так, а сегодня по-другому. UB — оно в Африке UB.


A>Это ты чё мне сейчас рассказываешь? Твой "символ веры"? Ну я не верю в эту веру.


Какой ещё веры. Есть документ — назвается стандарт языка, по которому разработчики компиляторов делают компиляторы. В этом документе чёрным по белому написано, что то, что ты считаешь "нормальной" работой, изначально (лет тридцать уж почти) квалифицировалось как неопределённое поведение.

Это не мой предмет веры — это твоё воинствующее невежество.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 15.08.2025 14:26 rg45 . Предыдущая версия . Еще …
Отредактировано 15.08.2025 14:15 rg45 . Предыдущая версия .
Отредактировано 15.08.2025 13:47 rg45 . Предыдущая версия .
Re[20]: C++ illegal instruction
От: alpha21264 СССР  
Дата: 20.08.25 16:06
Оценка: :))
Здравствуйте, rg45, Вы писали:

R>>>В твоем случае "нормальная" работа программы была всего лишь частным случаем проявления неопределённого поведения. Но суть неопределённого поведения в том-то и состоит, что ни на какое определённое поведение ты рассчитывать не можешь. Вчера она работала так, а сегодня по-другому. UB — оно в Африке UB.


A>>Это ты чё мне сейчас рассказываешь? Твой "символ веры"? Ну я не верю в эту веру.


R>Какой ещё веры. Есть документ — назвается стандарт языка, по которому разработчики компиляторов делают компиляторы. В этом документе чёрным по белому написано, что то, что ты считаешь "нормальной" работой, изначально (лет тридцать уж почти) квалифицировалось как неопределённое поведение.


1) Повторяю свой вопрос ещё раз — где тут "неопределённое поведение" (не по форме, а по сути)? Идиоты неправильно написали стандарт? Ну пусть переписывают!
2) Даже если у меня "неопределённое поведение" — это что, повод программу насильно в корку укладывать?
3) Почему предыдущая версия компилятора программу в корку не укладывала? Ты же говоришь, что это — "стандарт языка".

R>Это не мой предмет веры — это твоё воинствующее невежество.


Не-не-не. Это именно вера в догмы. Которая отрицает очевидные (видимые глазами) факты.
Нету тут неопределённого поведения. А ты говоришь, что есть.

Течёт вода Кубань-реки куда велят большевики.
Re[6]: C++ illegal instruction
От: alpha21264 СССР  
Дата: 20.08.25 16:14
Оценка: :)
Здравствуйте, so5team, Вы писали:

A>>Сейчас 90% выдачи компилятора — это предупреждения на const, которые вообще никогда не приведут к ошибкам.


S>А пример такого предупреждения можно? А то как-то субъективный опыт подсказывает, что когда что-то подозрительное происходит вокруг const, то ошибки уже не за горами.


Мой субъективный опыт подсказывает, что:
1) Такие ошибки встречаются раз в жизни. Ну вот в моей жизни не разу не встретилась.
2) Варнинги выдаются не когда "что-то подозрительное происходит", а когда ничего не происходит (переменная не меняется),
но компилятор исходя из его чувства прекрасного считает, что нужно поставить const.

Течёт вода Кубань-реки куда велят большевики.
Re[19]: C++ illegal instruction
От: alpha21264 СССР  
Дата: 20.08.25 16:26
Оценка: :)
Здравствуйте, so5team, Вы писали:

A>>И да, в ней функции забывают возвращать значения. Это не мешает порождать видео длинной до двух часов.


S>Такое ощущение, что вы с UB в первый раз столкнулись.

S>Работа программы с UB внутри -- это из категории "пока". Пока работает. Может быть.

Коллега so5team!
Вы прочитали, то, что тут написано?
https://rsdn.org/forum/cpp/8978430.1
Автор: alpha21264
Дата: 15.08 16:41


Да, я понимаю, что это не прямо в предыдущем сообщении.
Но Вы такой участник дискуссии.
Мне кажется, Вы должны помнить, о чём Вы дискутируете.


И как Вы думаете, какой ущерб понесёт человечество, если эта программа (вопреки законам природы) всё-таки упадёт в корку?

Течёт вода Кубань-реки куда велят большевики.
Re[7]: C++ illegal instruction
От: so5team https://stiffstream.com
Дата: 20.08.25 16:33
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>>>Сейчас 90% выдачи компилятора — это предупреждения на const, которые вообще никогда не приведут к ошибкам.


S>>А пример такого предупреждения можно? А то как-то субъективный опыт подсказывает, что когда что-то подозрительное происходит вокруг const, то ошибки уже не за горами.


A>Мой субъективный опыт подсказывает, что:

A>1) Такие ошибки встречаются раз в жизни. Ну вот в моей жизни не разу не встретилась.

Вам бы еще доказать, что у вас вообще есть хоть какой-то релевантный опыт в программировании на C++.

Ну и да, о том, какие последствия случаются от падения кирпича на голову, лучше обсуждать с врачами, чем со строителями, которые отказываются каски носить.
Re[20]: C++ illegal instruction
От: so5team https://stiffstream.com
Дата: 20.08.25 16:34
Оценка: +2
Здравствуйте, alpha21264, Вы писали:

S>>Такое ощущение, что вы с UB в первый раз столкнулись.

S>>Работа программы с UB внутри -- это из категории "пока". Пока работает. Может быть.

A>Коллега so5team!

A>Вы прочитали, то, что тут написано?
A>https://rsdn.org/forum/cpp/8978430.1
Автор: alpha21264
Дата: 15.08 16:41


Да. Типичное бахвальство ниасилятора, кичащегося тем, что никогда в жизни не изучал вопрос UB в C++ и не читал ни одной серьезной статьи, рассказывающей о том, чего не следует ждать от UB.
Re[7]: C++ illegal instruction
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 20.08.25 16:36
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Мой субъективный опыт подсказывает, что:

A>1) Такие ошибки встречаются раз в жизни. Ну вот в моей жизни не разу не встретилась.

Крайне ограниченный опыт


A>2) Варнинги выдаются не когда "что-то подозрительное происходит", а когда ничего не происходит (переменная не меняется),

A> но компилятор исходя из его чувства прекрасного считает, что нужно поставить const.

Что за чудо? Никогда такого не видел. Покажешь?
Маньяк Робокряк колесит по городу
Re[21]: C++ illegal instruction
От: rg45 СССР  
Дата: 20.08.25 17:16
Оценка: +1
Здравствуйте, alpha21264, Вы писали:

A>1) Повторяю свой вопрос ещё раз — где тут "неопределённое поведение" (не по форме, а по сути)? Идиоты неправильно написали стандарт?


Повторяю ещё раз свой ответ, неопределённое поведение вот здесь:

https://timsong-cpp.github.io/cppwp/n4861/stmt.return#2

8.7.3 The return statement
2 . . . Otherwise, flowing off the end of a function other than main or a coroutine ([dcl.fct.def.coroutine]) results in undefined behavior.


Видидишь, слова — "undefined behavior"? На русский язык это переводится как "неопределённое поведение".

Вот то, что написали "идиоты" — это и есть и по форме, и по сути.

A>Ну пусть переписывают!


А то что? У них перед тобой какие-то долговые обязательсва что ли?

A>2) Даже если у меня "неопределённое поведение" — это что, повод программу насильно в корку укладывать?


Скажи спасибо, что монитор не сожгло и винт не отформатировало.

A>3) Почему предыдущая версия компилятора программу в корку не укладывала? Ты же говоришь, что это — "стандарт языка".


Ты походу не вдупляешь, что такое неопределённое поведение. Это такое поведение, при котором программа может вести себя как угодно. Поведение может быть разным от версии к версии, от конфигурации к конфигурации и даже от запуска к запуску. Ты сам себе злой Буратино, если пишешь программы с UB.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 20.08.2025 17:40 rg45 . Предыдущая версия . Еще …
Отредактировано 20.08.2025 17:39 rg45 . Предыдущая версия .
Отредактировано 20.08.2025 17:34 rg45 . Предыдущая версия .
Отредактировано 20.08.2025 17:30 rg45 . Предыдущая версия .
Отредактировано 20.08.2025 17:29 rg45 . Предыдущая версия .
Отредактировано 20.08.2025 17:27 rg45 . Предыдущая версия .
Re[17]: C++ illegal instruction
От: T4r4sB Россия  
Дата: 20.08.25 17:39
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Да и собственно, я не и делаю отдельных отладочных сборок, зачем мне тестировать и отлаживать дебугную сборку, если пользователю я поставляю релизную?


Тогда как ты относишься к санитайзерам?
1. Ты не считаешь санитайзер отладочной сборкой
2. Ты поставляешь программы с санитайзерами
3. Ты не пользуешься санитайзерами
?

ПС дочитал тред
Ты разве не согласен, что есть проверки, которые очень полезны для диагностики, но неприемлемы в релизе?
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Отредактировано 20.08.2025 18:16 T4r4sB . Предыдущая версия .
Re[15]: C++ illegal instruction
От: B0FEE664  
Дата: 20.08.25 17:50
Оценка:
Здравствуйте, rg45, Вы писали:

R>А тут уж без вариантов будет функция — не шаблон, не перегрузка и не функциональный объект. Вот если написать std::sin и std::cos, тогда получится облом.

Это почему?
Неужели старый трюк ухода от макроса
a = (std::min)(a, b);
b = (std::max)(a, b);

больше не легален?
И каждый день — без права на ошибку...
Re[16]: C++ illegal instruction
От: rg45 СССР  
Дата: 20.08.25 18:09
Оценка:
Здравствуйте, B0FEE664, Вы писали:

R>>А тут уж без вариантов будет функция — не шаблон, не перегрузка и не функциональный объект. Вот если написать std::sin и std::cos, тогда получится облом.

BFE>Это почему?
BFE>Неужели старый трюк ухода от макроса
BFE>
BFE>a = (std::min)(a, b);
BFE>b = (std::max)(a, b);
BFE>

BFE>больше не легален?

Конечно легален. Только ты походу не совсем понял, о чём мы вели речь. Началось всё с выражения: (flag ? sin : cos)(x), в котором тернарный оператор вычисляется в указатель на функцию. Потом мы плавно перешли к следующему: допустим у нас есть выражение, имеющее вид функционального вызова f(...). Вопрос: в каких случаях имя f преобразуется в указатель на функцию? Из std::min и std::max ты не получишь указатели на функции и выражение вида (flag ? std::min : std::max)(a, b) тоже не напишешь, хоть со скобками, хоть без, потому что это имена шаблонов, да ещё и перегруженных. Впрочем сишные min/max также не преобразуются в указатели на функции, т.к. это имена макросов. А вот сишные sin/cos преобразуются в т.ч. и в C++.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 20.08.2025 18:36 rg45 . Предыдущая версия . Еще …
Отредактировано 20.08.2025 18:28 rg45 . Предыдущая версия .
Отредактировано 20.08.2025 18:27 rg45 . Предыдущая версия .
Отредактировано 20.08.2025 18:25 rg45 . Предыдущая версия .
Отредактировано 20.08.2025 18:11 rg45 . Предыдущая версия .
Отредактировано 20.08.2025 18:10 rg45 . Предыдущая версия .
Re[18]: C++ illegal instruction
От: Pzz Россия https://github.com/alexpevzner
Дата: 20.08.25 18:19
Оценка:
Здравствуйте, T4r4sB, Вы писали:

Pzz>>Да и собственно, я не и делаю отдельных отладочных сборок, зачем мне тестировать и отлаживать дебугную сборку, если пользователю я поставляю релизную?


TB>Тогда как ты относишься к санитайзерам?

TB>1. Ты не считаешь санитайзер отладочной сборкой
TB>2. Ты поставляешь программы с санитайзерами
TB>3. Ты не пользуешься санитайзерами
TB>?

Особо не пользуюсь, пока valgrind-ом обхожусь.

В принципе, хорошо, наверное, отношусь. Но больно уж много они всего для себя хотят.
Re[17]: C++ illegal instruction
От: rg45 СССР  
Дата: 20.08.25 18:31
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Да и собственно, я не и делаю отдельных отладочных сборок, зачем мне тестировать и отлаживать дебугную сборку, если пользователю я поставляю релизную?


Ну и зря. Отладочные сборки могут помочь обнаружить в программе разного рода UB: неинициализированные переменные, битые ссылки, заезды по памяти и пр. А также нарушение assert-ов.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 20.08.2025 18:32 rg45 . Предыдущая версия .
Re[18]: C++ illegal instruction
От: Pzz Россия https://github.com/alexpevzner
Дата: 20.08.25 18:39
Оценка:
Здравствуйте, rg45, Вы писали:

Pzz>>Да и собственно, я не и делаю отдельных отладочных сборок, зачем мне тестировать и отлаживать дебугную сборку, если пользователю я поставляю релизную?


R>Ну и зря. Отладочные сборки могут помочь обнаружить в программе разного рода UB: неинициализированные переменные, битые ссылки, заезды по памяти и пр.


Мы, может, о чём-то разном говорим?

Я подразумеваю под отладочной сборкой сборку с отладочной информацией, выключенной оптимизацйей и включенными проверками. А под релизной — без отладочной информации, с включенной оптимизацией и без проверок.

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

Но gcc/clang не будет сам по себе следить за битыми ссылками, хоть с опцией -g, хоть без нее. Это надо санитайзеры всякие подключать. Я их пока не осилил, пользуюсь valgrind-ом.

При этом в gcc санитайзер вроде еще не завезли, а clang-овский требует, чтобы все библиотеки были с ним пересобраны. Такое себе, полсистемы пересобирать и непонятно куда выкладывать, чтобы с предустановленными библиотеками не поссориться.
Re[19]: C++ illegal instruction
От: rg45 СССР  
Дата: 20.08.25 18:48
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>>>Да и собственно, я не и делаю отдельных отладочных сборок, зачем мне тестировать и отлаживать дебугную сборку, если пользователю я поставляю релизную?


R>>Ну и зря. Отладочные сборки могут помочь обнаружить в программе разного рода UB: неинициализированные переменные, битые ссылки, заезды по памяти и пр.


Pzz>Мы, может, о чём-то разном говорим?


Pzz>Я подразумеваю под отладочной сборкой сборку с отладочной информацией, выключенной оптимизацйей и включенными проверками. А под релизной — без отладочной информации, с включенной оптимизацией и без проверок.


Всё верно, и я об этом же. В таких конфигурациях обычно генерируется дополнительный код облегчающий отладку. Например, память помечается специальными значениями при окончании времени жизни объектов, итераторы стандартных контейнеров снабжаются дополнительными средствами отслеживания валидности, бросаются исключения при обнаружении проблем наподобие тех, что были перечислены выше и т.п. Ну и assert-ы также выбрасывают исключения в случае нарушения ожиданий.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 20.08.2025 18:53 rg45 . Предыдущая версия . Еще …
Отредактировано 20.08.2025 18:50 rg45 . Предыдущая версия .
Re[20]: C++ illegal instruction
От: Pzz Россия https://github.com/alexpevzner
Дата: 20.08.25 19:02
Оценка:
Здравствуйте, rg45, Вы писали:

R>Всё верно, и я об этом же. В таких конфигурациях обычно генерируется дополнительный код облегчающий отладку. Например, память помечается специальными значениями при окончании времени жизни объектов, итераторы стандартных контейнеров снабжаются дополнительными средствами отслеживания валидности, бросаются исключения при обнаружении проблем наподобие тех, что были перечислены выше и т.п. Ну и assert-ы также выбрасывают исключения в случае нарушения ожиданий.


Это сейчас про системные библиотеки речь или про самодельные?

У нас в системных библиотеках вроде нет такого, доп. проверки, которые включаются при сборке.

В своём коде я не вижу смысла выключать рантайм-проверки в зависимости от режима сборки.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.