2010-07-08 2 views
1

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

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

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

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

Спасибо заранее.

Кришна

+0

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

+0

STL - это чистый C++. http://stackoverflow.com/questions/2444514/why-do-programmers-sometimes-refer-to-c-stl-like-its-a-separate-language –

+0

Я не знаю, работает ли он для собственного кода, или если это специфично для этих приложений, но когда некоторые из приложений, с которыми я тестировал крах, проверяю журнал событий. Вы можете сделать обработанный обработчик исключений, который также регистрирует журналы, если вы хотите изменить исходный код. –

ответ

2

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