Подтвердить что ты не робот

Как избежать того, чтобы окно "program.exe перестало работать" в режиме выпуска на окнах?

Я работаю над разработкой программного обеспечения на С++ в Visual Studio 2010. Поскольку это программное обеспечение должно запускаться на серверах, где человеческое взаимодействие недоступно, мне действительно нужно избавиться от этого "program.exe" рабочего "окна, которое появляется в версии выпуска в случае ошибок. Я просто хочу, чтобы программа завершилась (возможно, также выдает сообщение об ошибке, но не обязательно), и не оставляйте ее заблокированной, ожидая, когда кто-то щелкнет кнопку" Закрыть программу". Я должен упомянуть, что у меня 64-разрядная Windows 7 Professional на моей машине.

Я читал о нескольких вещах, таких как:

  • функция _set_abort_behavior. Это решает случай, когда вызывается функция abort(), но это не относится к ошибкам типа "векторный индекс вне диапазона".

  • Я знаю, что могу решить некоторые из этих ошибок, выполняя обработку исключений, но не все ошибки являются исключениями, поэтому это не решит мою проблему.

  • Я также кое-что прочитал о отладчике доктора Уотсона, который должен был закрыть приложение тихо, но у меня сложилось впечатление, что этот отладчик недоступен для Windows 7. Плюс я не знаю, если этот отладчик решит мою проблему в режиме выпуска...

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

Как это сделать в Visual Studio? Могу ли я использовать какие-либо настройки?

Есть ли способ превратить все ошибки в исключения из Visual Studio, так что я могу решить проблему с механизмом обработки исключений? (пожалуйста, будьте терпимы, если это был глупый вопрос)

Я с нетерпением жду ваших предложений. Большое спасибо за ваше время!

С уважением, Корнелия

4b9b3361

Ответ 2

Хороший способ - добавить свой собственный необработанный фильтр исключений (см. SetUnhandledExceptionFilter() docs), а затем написать журнал и мини-дамп так что вы можете делать все необходимые обработки ошибок (например, закрывать устройства/дескрипторы), а также иметь аварийный дамп, который вы можете проанализировать позже. Полезная информация в этом ответе: fooobar.com/questions/76725/...

Ответ 3

Иногда эта ошибка возникает только потому, что вы не добавили знак & перед значением, которое вы использовали в scanf

Попробуйте следующее, которое решило мою проблему

С

scanf("%d",code);

Для

scanf("%d",&code);