Ted*_*Ted 5 visual-studio-2008 visual-studio visual-c++
调试模式下的Windows CRT将显示"中止,重试,忽略"窗口,如果应用程序命中assert(false),有时它会多次创建并填满我的屏幕.
如果断言在调试器中断开而不问我任何问题,我会喜欢它.
我也试图修改报告钩子.它会在出现25-30"Abort"对话框后被调用.
我正在构建一个由单独的程序加载的DLL,如果这有帮助的话.它看起来像加载我的DLL的主机程序与调用我的代码的线程不一致.似乎其中一个线程已停止,但其他线程仍在运行.
如何配置CRT来执行此操作?
这适用于(至少对我而言,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)
希望有所帮助!
| 归档时间: |
|
| 查看次数: |
3512 次 |
| 最近记录: |