Тихий сбой в приложении Visual Studio 2008 С++

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

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

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

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

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

Кришна


person Krishna    schedule 08.07.2010    source источник
comment
Я понимаю, что повреждение стека является одной из вероятных причин, но как отладить это, когда я не могу подключить windbg (из-за большой нагрузки на сервер при воссоздании проблемы).   -  person Krishna    schedule 08.07.2010
comment
STL — это чистый C++. stackoverflow.com/questions/2444514/   -  person Billy ONeal    schedule 08.07.2010
comment
Я не знаю, работает ли это для нативного кода или специфично для этих приложений, но когда некоторые из протестированных мной приложений аварийно завершают работу, я проверяю журнал событий. Вы также можете создать обработчик необработанных исключений, который также ведет журнал, если вы хотите изменить исходный код.   -  person Merlyn Morgan-Graham    schedule 08.07.2010


Ответы (1)


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

person JSBձոգչ    schedule 08.07.2010