Тихая авария в приложении Visual Studio 2008 c ++ - PullRequest
1 голос
/ 08 июля 2010

У нас есть неуправляемое приложение на C ++ TCP-сервере, работающее как служба Windows, которое молча падает после нескольких дней работы на сервере Win2003. Лог-файл Dr. Watson не создается (нет проблем с журналом Dr. Watson, поскольку он фиксирует другие сбои в том же приложении). Из-за отсутствия файла журнала Dr. Watson мы не можем продолжить отладку ..

Приложение сервера TCP является своего рода HTTP-процессором. Он подключается к широкому спектру веб-серверов и обрабатывает данные.

Может кто-нибудь подсказать мне, что можно сделать для отладки тихих сбоев. К этому серверу подключено более 1000 пользователей в любой момент, и, следовательно, его невозможно запустить в режиме отладки. Авария не воспроизводится и происходит один раз в 5-10 дней на одном из 6 серверов.

Любой инструмент, который может помочь отладить эти тихие сбои. Приложение является чистым C ++ приложением без каких-либо MFC или STL ..

Заранее спасибо.

Кришна

1 Ответ

2 голосов
/ 08 июля 2010

В прошлый раз, когда у меня возникла такая проблема при сбое в режиме без вывода сообщений, это происходило из-за проверки параметров среды выполнения . , которая по умолчанию просто вызывает TerminateProcess без каких-либо других проверок (в зависимости от того, какая версия msvcrt*.dll Вы ссылаетесь на). Если это является причиной вашей проблемы, вы можете избежать ее, вызвав _set_invalid_parameter_handler и предоставив обработчик, который либо вызывает DebugBreak (вызывая сбой), либо ничего не делает, позволяя возвращать код ошибки вызывающей стороне. Подробности в ссылке выше.

...