none
MFC ASSERT(0) 코드 수행 시 메세지 창이 나타나지 않습니다. RRS feed

  • 질문

  • 에러 검출을 위해 ASSERT(0); 코드를 사용하고 있습니다.

    간단하게 다이얼로그 프로젝트를 만든후 확인 버튼에 ASSERT(0) 코드를 추가하여 동작하도록 테스트를 했는데요.

    Debug assertion error!

    정보~~

    정보~~

    의 메세지 창이 어느 순간 부터인지 나타나지 않습니다.

    F11로 코드를 한줄 한줄 따라가면서 확인해본 결과

    _CrtDbgReport() 의 값이 1을 리턴합니다.

    _VCrtDbgReportA()

    dbgrpt.cpp 까지 들어가서 

    int const message_box_result = __acrt_show_wide_message_box(
    message_buffer,
    L"Microsoft Visual C++ Runtime Library",
    MB_TASKMODAL | MB_ICONHAND | MB_ABORTRETRYIGNORE | MB_SETFOREGROUND);

    코드까지 살펴봤는데 여기에서 메세지창을 띄우지 않더군요.

    message_box_result의 값을 4로 리턴 받아서 항상 retry 를 실행하더군요.. 결론적으론 위의 코드에서 메세지 창을 띄우지 않는게 가장 큰 원인인데 그 이유와 해결 방법을 모르겠습니다.

    switch (message_box_result)
    {
    case IDABORT: // Abort:  Terminate execution
    {
    // Note that even though we are "aborting," we do not call abort()
    // because we do not want to invoke Watson (the user has already had an
    // opportunity to debug the error and chose not to).
    raise(SIGABRT);
    _exit(3);
    }

    case IDRETRY:
    {
    return 1; // Retry:  Debug break
    }

    case IDIGNORE:
    default:
    {
    return 0; // Ignore:  Continue execution
    }
    }

    2017년 3월 24일 금요일 오전 1:13