Windows CRT和断言报告(中止,重试,忽略)

Ted*_*Ted 5 visual-studio-2008 visual-studio visual-c++

调试模式下的Windows CRT将显示"中止,重试,忽略"窗口,如果应用程序命中assert(false),有时它会多次创建并填满我的屏幕.

如果断言在调试器中断开而不问我任何问题,我会喜欢它.

我修改了CRT报告标志,这些标志没有任何效果.

我也试图修改报告钩子.它会在出现25-30"Abort"对话框后被调用.

我正在构建一个由单独的程序加载的DLL,如果这有帮助的话.它看起来像加载我的DLL的主机程序与调用我的代码的线程不一致.似乎其中一个线程已停止,但其他线程仍在运行.

如何配置CRT来执行此操作?

Lia*_*iao 6

这适用于(至少对我而言,vs 2008):(基本上,从钩子函数返回TRUE)

int __cdecl CrtDbgHook(int nReportType, char* szMsg, int* pnRet)
{
    return TRUE;//Return true - Abort,Retry,Ignore dialog will *not* be displayed
    return FALSE;//Return false - Abort,Retry,Ignore dialog *will be displayed*
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    _CrtSetReportHook2(_CRT_RPTHOOK_INSTALL, CrtDbgHook);
    assert(false);
    getch();
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

您也可以编写自己的类似断言的行为(请注意,这将显示"Break,Continue"对话框):

#define MYASSERT(x) { if(!(x)) {DbgRaiseAssertionFailure();} }

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    MYASSERT(false);
    getch();
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!