Здравствуйте, Pzz, Вы писали:
Pzz>Если у программы сработал assert, значит, у неё с головой уже не всё в порядке. Какой смысл продолжать агонию? Всё равно уже непонятно, куда её дальше занесёт.
Pzz>Критический сервис — ну, на случай его падения должен быть план Б. В диапазоне от "перезапустить" и до "перейти на другой компьютер". На то он и критический, чтобы его падение тоже было штатной ситуацией, из которой предусмотрен выход. В конце концов, он может просто от аппаратной ошибки сломаться, или от сети отвалиться из-за плохого контакта в сетевом разъеме.
Всё так, и пререзапускается у нас автоматом. Но была ситуация — при вычитке, разборе, и дальнейшей обработке сообщения из кафки срабатывал неверный ассёрт, ну так вот вышло, моя лажа. И программа падала, не закоммитив это сообщение. А потом поднималась — и вычитывала его опять...
План Б, конечно, был: выгребли руками это сообщение из очереди. Но пока упало, пока осознали, пока до нас (девов) добрались — время. А у нас private LTE core, пока сервис лежит, абоненты не могут звонить и IoT устройства слать ничего не могут. Клиент нервничал, в результате нервничал я, а я этого не люблю, и ещё больше не любит руководство (справедливо).
Pzz>Мне показывали пальцем на хидер от вендового SDK, там был #ifdef DEBUG ... #endif прямо посреди enum-а. А enum был такой, с автоматически назначаемыми значениями. Т.е., значения этого enum-а были разные для отладочной и релизной сборки. Pzz>Ну его нафиг, еще и такие ошибки мне искать.
Ну неприятно, да... интересно было бы на это глянуть. Но риск такого у меня минимален, т.к. собираю монолит без so, а профит от debug-диагностики реален.
Pzz>Кстати, степень въедливости статического анализа что в gcc, что в clang-е зависят от оптимизации. С выключенной оптимизацией он не делает каких-то видов анализа кода, которые ему и для предупреждений нужны, а не только для кодогенерации.
Не, ну перед коммитом один хрен собирать релиз, да и CI не пропустит билд с предупреждениями. Так что максимум — ну позже починю, чем если бы изначально с релизом работал.
Pzz>ASAN я как-то не осилил. Больно многого они хотят. Например, пересборки библиотек, от которых зависит программа, с ASAN-ом. Это ж полсистемы надо пересобрать да еще как-то бесконфликтно разложить. Нафиг такой инструментарий.
Такого требования, чтобы библиотеки пересобирать, нет. Могут быть сложности, если память выделяетя в библиотеке, а освобождается в прикладном коде, но это само по себе нездорово. У меня библиотеки собираются без ASAN, продукт с ним, и никаких спецэффектов не наблюдал.
Pzz>У меня эти времянки иногда по ошибке утекают в коммит. Так что я стараюсь даже и во времянке дичи не писать.
Худшее — CI обругает ворнингами и билд сломается, не страшно. Совсем дичи я же не пишу.