2014 dxdy logo

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

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




На страницу 1, 2  След.
 
 MS VS C: отладочная работает, а релиз нет
Сообщение09.08.2021, 16:00 
Аватара пользователя
Консольное приложение на C не работает, просто в какой-то момент зависает на несколько секунд и отключается.
Отключение происходит, например, при вызове функции из подключенной библиотеки, были и другие варианты. Происходит данное явление при некоторых наборах входных данных, при других все нормально отрабатывает. Никаких сообщений не появляется.
Найти, в чем дело, в отладчике невозможно, так как в отладчике все прекрасно работает, равно как и отладочный экзешник.
Понимаю, что вопрос мутный, но, может быть, кому-то данная ситуация о чем-нибудь говорит?
Microsoft Visual Studio Community 2019, пробовал и на Professional собирать, тот же эффект, аналогично при подключении Clang. Win10, пробовал запускать на 7-ке - сбои наблюдаются на других данных и в других местах.

 
 
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение09.08.2021, 16:19 
Смахивает на неопределённое поведение, когда где-то пропущена инициализация данных, например.

 
 
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение09.08.2021, 16:26 
Аватара пользователя
Раз у вас есть возможность собирать clang'ом - попробуйте собрать с флагами -fsanitize=undefined и -fsanitize=address, скорее всего с одним из них скажет что-то осмысленное.

 
 
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение09.08.2021, 17:06 
Аватара пользователя
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 
Аватара пользователя
Никогда не имел дела с VS, но беглый гуглинг выдает https://stackoverflow.com/questions/639 ... lang-flags.
пианист в сообщении #1528404 писал(а):
при перемещении экзешника и файла данных в другую директорию корректность работы приложения изменяется
Почти наверняка UB. Где-то что-то читается или пишется не по тому адресу.

 
 
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение09.08.2021, 18:05 
пианист в сообщении #1528404 писал(а):
Т.е. в режиме отладки срабатывает некоторое правило, а в релизе нет?

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

 
 
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение09.08.2021, 18:33 
Аватара пользователя
mihaild
Ясно, буду копать.
Sender
А отладчик, стало быть, эти данные пишет, и тем самым решает проблему..

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

 
 
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение09.08.2021, 19:13 
пианист
Можно для релиз версии выставить опцию генерировать отладочную информацию. И запустить релиз под отладчиком.
Тогда при ошибке отладчик ткнёт прямо в место ошибки.

 
 
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение09.08.2021, 20:20 
пианист в сообщении #1528411 писал(а):
А отладчик, стало быть, эти данные пишет, и тем самым решает проблему..

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

 
 
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение10.08.2021, 22:53 
Аватара пользователя
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 
Аватара пользователя
А что при этом в перемножаемых для получения размера переменных? В частности, точно ли они инициализированы чем нужно?

 
 
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение11.08.2021, 05:45 
Аватара пользователя
Да. $30\times6\times6$

 
 
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение11.08.2021, 07:20 
Аватара пользователя
Поменял calloc на malloc, где можно было.
В результате точка останова переехала на пару строк выше
Используется синтаксис C
int* za = (int*)malloc(num_uni * num_apps * num_dirs * sizeof(int));

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

 
 
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение11.08.2021, 08:36 
пианист в сообщении #1528486 писал(а):
Critical error detected c0000374

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

 
 
 
 Re: MS VS C: отладочная работает, а релиз нет
Сообщение11.08.2021, 09:21 
Аватара пользователя
Не знаете - место нарушения должно находиться в пределах той функции, где происходит останов, или же не обязательно?

 
 
 [ Сообщений: 22 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group