2010-07-08 3 views
1

Win2003 서버에서 며칠 동안 작동하지 않고 자동으로 충돌하는 Windows 서비스로 실행되는 관리되지 않는 C++ TCP 서버 응용 프로그램이 있습니다. Dr. Watson 로그 파일이 생성되지 않습니다 (동일한 응용 프로그램에서 다른 충돌을 catch하므로 Dr. Watson 로그 문제 없음). Dr. Watson 로그 파일이 없기 때문에이 디버깅 방법을 계속 진행할 수 없습니다.Visual Studio 2008 C++ 응용 프로그램의 자동 충돌 발생

TCP 서버 응용 프로그램은 일종의 HTTP 프로세서입니다. 광범위한 웹 서버에 연결하여 데이터를 처리합니다.

조용한 충돌을 디버그하기 위해 수행 할 수있는 일을 누군가 안내해 주실 수 있습니까? 어떤 순간에도이 서버에 연결된 1000 명이 넘는 사용자가있어 디버그 모드에서 동일한 것을 실행할 수 없습니다. 충돌은 재현 불가능하며 6 대의 서버 중 하나에서 5 ~ 10 일에 한 번 발생합니다.

이러한 자동 충돌을 디버그하는 데 도움이되는 도구. 이 응용 프로그램은 MFC 또는 STL이없는 순수한 C++ 응용 프로그램입니다.

감사합니다.

크리슈나

+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

이 같은 자동 충돌 문제가 있었다 마지막으로, 그것은 (당신이 링크 msvcrt*.dll의 버전에 따라) 때문에 기본적으로 다른 모든 선 (善)하지 않고 TerminateProcess를 호출 C runtime parameter validation.,이었다. 이것이 문제의 원인이라면 _set_invalid_parameter_handler을 호출하고 DebugBreak (크래시 강제)을 호출하는 핸들러를 제공하거나 아무 것도하지 않아 호출자에게 오류 코드를 반환 할 수 있습니다. 위 링크의 세부 정보.