2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 MS VS C: отладочная работает, а релиз нет
Сообщение09.08.2021, 16:00 
Заслуженный участник
Аватара пользователя


03/06/08
2183
МО
Консольное приложение на C не работает, просто в какой-то момент зависает на несколько секунд и отключается.
Отключение происходит, например, при вызове функции из подключенной библиотеки, были и другие варианты. Происходит данное явление при некоторых наборах входных данных, при других все нормально отрабатывает. Никаких сообщений не появляется.
Найти, в чем дело, в отладчике невозможно, так как в отладчике все прекрасно работает, равно как и отладочный экзешник.
Понимаю, что вопрос мутный, но, может быть, кому-то данная ситуация о чем-нибудь говорит?
Microsoft Visual Studio Community 2019, пробовал и на Professional собирать, тот же эффект, аналогично при подключении Clang. Win10, пробовал запускать на 7-ке - сбои наблюдаются на других данных и в других местах.

 Профиль  
                  
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение09.08.2021, 16:19 


14/01/11
2919
Смахивает на неопределённое поведение, когда где-то пропущена инициализация данных, например.

 Профиль  
                  
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение09.08.2021, 16:26 
Заслуженный участник
Аватара пользователя


16/07/14
8465
Цюрих
Раз у вас есть возможность собирать clang'ом - попробуйте собрать с флагами -fsanitize=undefined и -fsanitize=address, скорее всего с одним из них скажет что-то осмысленное.

 Профиль  
                  
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение09.08.2021, 17:06 
Заслуженный участник
Аватара пользователя


03/06/08
2183
МО
Sender
Т.е. в режиме отладки срабатывает некоторое правило, а в релизе нет?

mihaild
А как это сделать в VS? Я подключил в соответствии с рекомендацией https://docs.microsoft.com/ru-ru/cpp/bu ... w=msvc-160

-- Пн авг 09, 2021 18:11:43 --

Дополнительно: при перемещении экзешника и файла данных в другую директорию корректность работы приложения изменяется.

 Профиль  
                  
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение09.08.2021, 17:22 
Заслуженный участник
Аватара пользователя


16/07/14
8465
Цюрих
Никогда не имел дела с VS, но беглый гуглинг выдает https://stackoverflow.com/questions/639 ... lang-flags.
пианист в сообщении #1528404 писал(а):
при перемещении экзешника и файла данных в другую директорию корректность работы приложения изменяется
Почти наверняка UB. Где-то что-то читается или пишется не по тому адресу.

 Профиль  
                  
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение09.08.2021, 18:05 


14/01/11
2919
пианист в сообщении #1528404 писал(а):
Т.е. в режиме отладки срабатывает некоторое правило, а в релизе нет?

Нет, просто по недосмотру программиста результат работы программы зависит от данных, которые, вообще говоря, могут при каждом запуске принять случайное значение. (При некоторых условиях это значение может оказаться неизменным на протяжении нескольких запусков одной и той же сборки).

 Профиль  
                  
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение09.08.2021, 18:33 
Заслуженный участник
Аватара пользователя


03/06/08
2183
МО
mihaild
Ясно, буду копать.
Sender
А отладчик, стало быть, эти данные пишет, и тем самым решает проблему..

mihaild
Sender
Большое спасибо за указанное направление!

 Профиль  
                  
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение09.08.2021, 19:13 


31/05/11
28
пианист
Можно для релиз версии выставить опцию генерировать отладочную информацию. И запустить релиз под отладчиком.
Тогда при ошибке отладчик ткнёт прямо в место ошибки.

 Профиль  
                  
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение09.08.2021, 20:20 


14/01/11
2919
пианист в сообщении #1528411 писал(а):
А отладчик, стало быть, эти данные пишет, и тем самым решает проблему..

Не думаю, что он так делает. Просто у вас, вероятно, так получилось, что при запуске отладочной сборки задействована одна область памяти, в которой лежат случайные значения, а при запуске релизной - другая(в которой лежат другие случайные значения). И одни значения рушат программу, а другие - чудом нет.

 Профиль  
                  
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение10.08.2021, 22:53 
Заслуженный участник
Аватара пользователя


03/06/08
2183
МО
HungryLion
Спасибо, действительно, ткнул.
Правда, в чем смысл, не понимаю.
Остановка на строчке
Используется синтаксис C
int* za = (int*)calloc(num_uni * num_apps * num_dirs, sizeof(int));

а в комментарии Critical error detected c0000374
Но все-таки хоть примерно понятно, в какую сторону крутить..

 Профиль  
                  
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение10.08.2021, 22:58 
Заслуженный участник
Аватара пользователя


16/07/14
8465
Цюрих
А что при этом в перемножаемых для получения размера переменных? В частности, точно ли они инициализированы чем нужно?

 Профиль  
                  
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение11.08.2021, 05:45 
Заслуженный участник
Аватара пользователя


03/06/08
2183
МО
Да. $30\times6\times6$

 Профиль  
                  
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение11.08.2021, 07:20 
Заслуженный участник
Аватара пользователя


03/06/08
2183
МО
Поменял calloc на malloc, где можно было.
В результате точка останова переехала на пару строк выше
Используется синтаксис C
int* za = (int*)malloc(num_uni * num_apps * num_dirs * sizeof(int));

В процессе наблюдал хаотическое перемещение точки останова по коду, в т.ч. в одном и том же коде при повторном запуске.
Еще: обе переменных указаны как удаленные оптимизатором.

 Профиль  
                  
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение11.08.2021, 08:36 


14/01/11
2919
пианист в сообщении #1528486 писал(а):
Critical error detected c0000374

Вроде бы это heap data corruption. Где-то выше по коду вылезли за пределы выделенной памяти и повредили служебные данные кучи, как я понимаю.

 Профиль  
                  
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение11.08.2021, 09:21 
Заслуженный участник
Аватара пользователя


03/06/08
2183
МО
Не знаете - место нарушения должно находиться в пределах той функции, где происходит останов, или же не обязательно?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group