В релизе получаю исключения
От: _agg  
Дата: 26.05.23 02:39
Оценка:
Всем привет, сделал небольшой сервак в виде TAO модуля. Суть проста через интерфейс принимает данные, в другом потоке рассылает события об изменениях подписчикам через интерфейс обратного вызова. Написал программку которая нагружает его, в Debug все отлично, в Release из под студии получаю:
Exception thrown at 0x75E1EAE2 in toris2_server.exe: Microsoft C++ exception: std::system_error at memory location 0x00F3DF44.
Exception thrown at 0x75E1EAE2 in toris2_server.exe: Microsoft C++ exception: std::system_error at memory location 0x00F3DF44.
Exception thrown at 0x75E1EAE2 in toris2_server.exe: Microsoft C++ exception: std::system_error at memory location 0x00F3DF44.
Exception thrown at 0x75E1EAE2 in toris2_server.exe: Microsoft C++ exception: std::system_error at memory location 0x00F3DF44.
Exception thrown at 0x75E1EAE2 in toris2_server.exe: Microsoft C++ exception: std::system_error at memory location 0x00F3DF44.
Exception thrown at 0x75E1EAE2 in toris2_server.exe: Microsoft C++ exception: std::system_error at memory location 0x00F3DF44.
Exception thrown at 0x75E1EAE2 in toris2_server.exe: Microsoft C++ exception: std::system_error at memory location 0x00F3DF44.
Exception thrown at 0x75E1EAE2 in toris2_server.exe: Microsoft C++ exception: std::system_error at memory location 0x00F3DF44.
Exception thrown at 0x75E1EAE2 in toris2_server.exe: Microsoft C++ exception: std::system_error at memory location 0x00F3DF44.
Exception thrown at 0x75E1EAE2 in toris2_server.exe: Microsoft C++ exception: std::system_error at memory location 0x00F3DF44.
Exception thrown at 0x75E1EAE2 in toris2_server.exe: Microsoft C++ exception: std::system_error at memory location 0x00F3DF44.


Все как бы работает, но так как TAO библиотека мудрая то она это исключения передает клиенту, его конечно перехватываешь и все ок, данные не потерялись,
но хочется разобраться в чем причина, подскажите может есть настройки компилятора какие-то что бы как-нибудь выявить это, в общем за любые советы спасибо.
Re: В релизе получаю исключения
От: kov_serg Россия  
Дата: 26.05.23 05:16
Оценка:
Здравствуйте, _agg, Вы писали:

_>Все как бы работает, но так как TAO библиотека мудрая то она это исключения передает клиенту, его конечно перехватываешь и все ок, данные не потерялись,

_> но хочется разобраться в чем причина, подскажите может есть настройки компилятора какие-то что бы как-нибудь выявить это, в общем за любые советы спасибо.

1. А что пишет само исключение, если поймать?
сatch(const std::system_error& e) {
  std::cout << "Caught system_error with code " << e.code() << " meaning " << e.what() << '\n';
}

2. Отладчик в студии больше не работает? Можно же останавливаться при возникновении данного исключения.
Re[2]: В релизе получаю исключения
От: _agg  
Дата: 26.05.23 07:21
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, _agg, Вы писали:


_>>Все как бы работает, но так как TAO библиотека мудрая то она это исключения передает клиенту, его конечно перехватываешь и все ок, данные не потерялись,

_>> но хочется разобраться в чем причина, подскажите может есть настройки компилятора какие-то что бы как-нибудь выявить это, в общем за любые советы спасибо.

_>1. А что пишет само исключение, если поймать?

_>
_>сatch(const std::system_error& e) {
_>  std::cout << "Caught system_error with code " << e.code() << " meaning " << e.what() << '\n';
_>}
_>

_>2. Отладчик в студии больше не работает? Можно же останавливаться при возникновении данного исключения.

Вот само исключение в сервере я наблюдаю только в окне Output, где оно именно происходит непонятно, пробовал перехватывать но увы.
В данный момент поиграл настройками компилятора и когда указываешь оптимизацию "Optimizations (Favor Speed) (/Ox)" таких исключений не возникает.
Плохо что не разобрался конечно в чем причина, но ситуацию исправил.
Re[3]: В релизе получаю исключения
От: mike_rs Россия  
Дата: 26.05.23 11:35
Оценка:
Здравствуйте, _agg, Вы писали:

_>В данный момент поиграл настройками компилятора и когда указываешь оптимизацию "Optimizations (Favor Speed) (/Ox)" таких исключений не возникает.

_>Плохо что не разобрался конечно в чем причина, но ситуацию исправил.

ничего не исправил, просто замотал под коврик. в дебаге переменные явно инициализируются (обнуляются или спец константа), в релизе же там может быть любой мусор, вот оно и стреляет.
Re[4]: В релизе получаю исключения
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 26.05.23 11:59
Оценка:
Здравствуйте, mike_rs, Вы писали:

_>в дебаге переменные явно инициализируются (обнуляются или спец константа)


По-моему, компиляторы, обнуляющие переменные в стеке, остались в далеком прошлом. А спецконстанты обычно такие, что нормальная работа при них очень маловероятна. У меня вот ни разу не было, чтоб забыл инициализировать, и в дебаге ничего не глючило.
Re[5]: В релизе получаю исключения
От: mike_rs Россия  
Дата: 26.05.23 20:12
Оценка: +1
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>По-моему, компиляторы, обнуляющие переменные в стеке, остались в далеком прошлом. А спецконстанты обычно такие, что нормальная работа при них очень маловероятна.


ключевая разница между дебаг и релиз — это явная инициализация переменных дефолтными значениями, а не мусором. от этого все беды.
Re[6]: В релизе получаю исключения
От: T4r4sB Россия  
Дата: 26.05.23 20:17
Оценка: +1
Здравствуйте, mike_rs, Вы писали:

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


И что, есть комплиятор, который реально в дебаге инициализирует нулём, а не специально подобранным мусором, который с высокой вероятностью стрельнет? А кто такое грабледром сделал и зачем?
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[6]: В релизе получаю исключения
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 26.05.23 20:26
Оценка:
Здравствуйте, mike_rs, Вы писали:

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


Вы о чем вообще? Кто в здравом уме оборачивает явную инициализацию переменных условием "дебаг/релиз"?
Re[7]: В релизе получаю исключения
От: kov_serg Россия  
Дата: 26.05.23 20:35
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>А кто такое грабледром сделал и зачем?

Вы стандарт видели (так и задумано) — это специальный грабледром, который позволяет в случае UB выполнят прикольные оптимизации (отключенные в дебаге) которые потом приводят к чудесам. И по стандарту компилятор в этом не виноват, виноват человек который использует этот компилятор.
Так что статический асинизатор анализвтор в руки и алга.
Отредактировано 26.05.2023 20:36 kov_serg . Предыдущая версия .
Re[8]: В релизе получаю исключения
От: T4r4sB Россия  
Дата: 26.05.23 20:40
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, T4r4sB, Вы писали:


TB>>А кто такое грабледром сделал и зачем?

_>Вы стандарт видели (так и задумано) — это специальный грабледром, который позволяет в случае UB выполнят прикольные оптимизации (отключенные в дебаге) которые потом приводят к чудесам.

Да, а ещё он позволяет в дебаге раскидать код так, чтоб потенциальные УБ сразу стреляли.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[9]: В релизе получаю исключения
От: kov_serg Россия  
Дата: 26.05.23 21:20
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Да, а ещё он позволяет в дебаге раскидать код так, чтоб потенциальные УБ сразу стреляли.


А вот и нифига https://godbolt.org/z/ds63evG7q он и без стрельбы позволяет позволяет причинять добро.

bool test() { bool x; return x||!x; } // UB

DEBUG 1
RELEASE 0
Отредактировано 26.05.2023 21:30 kov_serg . Предыдущая версия .
Re[10]: В релизе получаю исключения
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 27.05.23 09:07
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>
_>bool test() { bool x; return x||!x; } // UB
_>


Вменяемый компилятор, в режиме высокого уровня предупреждений, непременно на такое выругается. Ну а кто компилит с W3, тот ССЗБ.

А вот в отношении переменных-членов компилятор уже не так строг, поэтому в функциях-членах весьма пользительно иметь что-нибудь вроде Assert (static_cast <int> (x) <= 1). Заодно помогает ловить и просто порчу памяти.
Re[7]: В релизе получаю исключения
От: mike_rs Россия  
Дата: 30.05.23 07:27
Оценка: -1
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Вы о чем вообще? Кто в здравом уме оборачивает явную инициализацию переменных условием "дебаг/релиз"?


чем больше бреда ты пишешь, тем большие у меня сомнения, что ты вообще программист
Re[7]: В релизе получаю исключения
От: B0FEE664  
Дата: 31.05.23 09:53
Оценка:
Здравствуйте, T4r4sB, Вы писали:

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

TB>И что, есть комплиятор, который реально в дебаге инициализирует нулём, а не специально подобранным мусором, который с высокой вероятностью стрельнет? А кто такое грабледром сделал и зачем?

Примерно три недели назад выловил баг с не инициализированным членом класса. Переменная была 0 и в debug, и в release сборках. gcc для arm.
И каждый день — без права на ошибку...
Re[8]: В релизе получаю исключения
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 01.06.23 07:58
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>выловил баг с не инициализированным членом класса.


Класс не делает периодических проверок на допустимость значений членов?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.