1

Windows에서 실패한 ASSERT 문은 아래의 디버그 메시지를 표시하고 응용 프로그램 실행을 중단시킵니다. 이것이 예상 된 동작이지만, 헤드리스 머신에서 주기적으로 실행되므로 유닛 테스트가 실패하지 않고 대신 사용자 입력을 무기한 대기합니다.MSVC++ 디버그 오류로 인해 현재 프로세스가 차단되지 않습니까?

레지스트리 키 또는 컴파일러 플래그가 있어도이 메시지 상자가 ASSERT 하에서 테스트가 실패하는 동안 사용자 입력을 요청하지 못하게 할 수 있습니까?

기본적으로 나는 코드를 수정하지 않고 컴파일러 나 Windows 옵션을 변경하기 만하면됩니다.

감사!

MSDN부터 ASSERT 매크로에 대한

Microsoft Visual C++ Debug Library ASSERT http://img519.imageshack.us/img519/853/snapshotbu1.png

답변

1

:하여 MFC의 ISAPI 응용 프로그램에서

, 디버그 모드에서 주장 모달 대화 상자 (기본으로 모달 대화 상자를 주장)를 나타납니다; 이것은 실행을 중단 시키거나 중단시킵니다. 일단 당신이 이것을하면

// For custom assert and trace handling with WebDbg 
#ifdef _DEBUG 
CDebugReportHook g_ReportHook; 
#endif 

, 당신이 주장을 확인하기 위해 WebDbg 도구 (WebDbg.exe)를 사용할 수 있습니다 : 모달 주장 대화 상자를 표시하지 않으려면 (projectname.cpp) 프로젝트의 소스 파일에 다음 행을 추가합니다.

2

_CRT_ASSERT 유형의 보고서에 _CrtDbgReport로 표시된 대화 상자라고 생각합니다. _CrtSetReportHook을 사용하면 전체 응용 프로그램의 동작을 조정할 수 있습니다. 즉, 하나의 로컬 변경이 필요합니다. 특히, 어설 션 실패 후 계속 실행하여 무시할 수 있습니다.

0

단위 테스트 환경에서 ASSERT (실제로는 _CrtDbgReport 호출)를 몇 가지 예외 (일반적으로 std :: exception)로 변환하는 것이 좋습니다. 여기에는 정보 텍스트가 포함되어 있습니다. 이것은 단위 테스트의 출력 로그에 오류가 발생하는 경향이 있습니다. 그것은 당신이 원하는 것입니다. 실패한 ASSERT는 실패한 단위 테스트 여야합니다.

다음을 사용하여 지정된대로 report-hook 함수를 던집니다. _CrtSetReportHook()