我有一个打印出消息的简单断言宏。这通常在应用程序不是控制台应用程序时起作用(即我弹出一个很好的对话框,并且表达式包含消息,此时我可以尝试重试调试)但是当它出现时,控制台会拦截所有消息。当控制台隐藏在IDE后面并且我必须将其删除时,这会变得很烦人,然后返回到断言对话框,然后点击重试进行调试。
有没有办法阻止它拦截邮件,以便弹出的对话框包含所有信息。
宏是这样的:
#define MyAssert(_Exp, _Msg) assert(_Exp && _Msg)
编辑:屏幕截图
答案 0 :(得分:3)
CRT尝试根据应用程序的类型计算出断言输出的位置。它从可执行文件的类型(/ SUBSYSTEM)中检测到这一点。但是,您可以使用_set_app_type覆盖,以便CRT的行为就像您的控制台应用程序是Windows应用程序一样。更有可能的是,您只想影响断言,因此应调用_CrtSetReportMode以更改为_CRTDBG_MODE_WNDW
您没有指定您的VS版本,但是对于所有最新版本,这些都是可用的(在VS2003中具有微妙的命名差异)。
马丁