2009-04-09 5 views
13

C/C++ 코드를 테스트하기 위해 Hudson을 연속 통합 서버로 사용하고 있습니다. 불행히도, 어딘가에 메모리 손상을 일으키는 버그가 있습니다. 따라서 일부 Windows 컴퓨터에서는 읽을 수없는 메모리를 참조하는 명령을 설명하는 "응용 프로그램 오류"대화 상자가 나타납니다. 이 대화 상자는 수동으로 개입해야하기 때문에 기본적으로 테스트 실행을 중단시킵니다."응용 프로그램 오류"대화 상자를 사용할 수 있습니까?

이 대화 상자가 나타나지 않도록 할 수있는 방법이있어 테스트 실행이 실패하고 허드슨에서 이와 같이보고됩니다.

대화 상자를 표시하는 대신 미니 덤프를 자동으로 생성 할 수 있습니까?

+0

유사 : https://stackoverflow.com/questions/2284138/disable-debug-prompt-on-application-crash 및 https://stackoverflow.com/questions/3561545/how-to-terminate-a-program -when-it-crashes-just-fail-a-unit-test – Vadzim

답변

11
  1. 사용에 응답하는 방법을 제어하는 ​​다양한 _CrtSetReport 기능을 사용할 수 있습니다. this PC World article도 참조하십시오.
  2. 빌드 머신에 MS Visual Studio가있는 경우 응용 프로그램 오류가 발생하고 대화 상자가 나타납니다. 이러한 대화 상자 (및 Visual Studio의 Just-In-Time Debugging 기능)를 사용하지 않도록 설정하려면 drwtsn32.exe -i 명령을 실행하여 Dr. Watson을 기본 시스템 디버거로 설정하십시오. Dr. Watson은 코어 덤프를 생성하고 자동 종료합니다. (이 Microsoft 기술 자료 문서를 참조하십시오. http://support.microsoft.com/kb/q121434/) 또한 programaticaly SetErrorMode를 사용하여이 같은 작업을 수행 할 수 있습니다
+1

감사! Dr. Watson 구성을 복원하고 프롬프트하지 않도록 설정하면 내가 찾고 있던 것이 었습니다! – mch

+1

PC World 기사가 비어있는 것 같습니다. 따라서 첫 번째 대안은 유용한 대답을 제공하지 않습니다. – skyking

-2

try/catch 문을 사용하여 예외를 catch하고 원하는대로 처리하십시오.

+1

Try/catch는 내가 아는 한 잘못된 메모리 액세스를 잡을 수 없습니다. – mch

+1

__try/__except 수 있습니다. – ChrisV

1

해제 오류보고를 통해 :

  • 레지스트리 편집 - 마이크로 소프트 \ PCHealth \ ErrorReporting \ ExclusionList \ HKEY_LOCAL_MACHINE \ 소프트웨어에 응용 프로그램을 추가하거나
  • 고급으로 이동, 내 컴퓨터를 마우스 오른쪽 단추로 클릭 탭 및 옵션 "보고 사용 안 함 오류"를 선택, 또는
  • 당신은보고 서비스에 오류를 발견, 관리 도구의 서비스 콘솔로 이동 특성에 가서 비활성화 할 수 있습니다 그것을
1

당신은 씨가 조심스럽게 알 수 있듯이, "사용 안함 오류보고"는 C/C++ 런타임 다양한 오류 (_CrtSetReportHook, _CrtSetReportMode, _CrtSetReportFile, _CrtSetReportHook2)

7

. 자세한 내용은 this 문서를 참조하십시오.

SetErrorMode(GetErrorMode() | SEM_NOGPFAULTERRORBOX); 

위의 '관찰 보고서'우리의 원하는 추가하여 현재 모드 :

를 사용하는 방법의 간단한 예는 다음을 수행하는 것입니다.

+1

마찬가지로 "_set_abort_behavior (0, _WRITE_ABORT_MSG);"를 호출하는 것이 중요하다고 생각합니다. 누군가가 "abort()"(Debug 빌드 IIRC에서 캐치되지 않은 C++ 예외에 대한 기본 동작) . – pauldoo

2

Windows XP 64 비트를 실행하는 경우 rkb가 말한 것 외에 2 가지 값이 있습니다. 일반적인 레지스트리 위치에있는 사람과 Wow6432Node 키 아래에있는 사람은 HKLM입니다. 두 가지 모두를 업데이트하려면 %SYSTEMROOT%\system32%SYSTEMROOT%\SysWOW64 모두에서 drwtsn32.exe -i을 실행하십시오.

관련 문제