C++ 控制台正在拦截我的所有断言消息
我有一个简单的断言宏,用于打印消息。这通常在应用程序不是控制台应用程序时起作用(即,我会弹出一个漂亮的对话框,其中的表达式包含我可以点击“重试”进行调试的消息),但当应用程序是控制台应用程序时,控制台会截取所有消息。当控制台隐藏在IDE后面,我必须将其搜索出来,然后返回到断言对话框,点击重试进行调试时,这会变得很烦人 有没有办法阻止它截取消息,这样弹出的对话框就有了所有信息 宏是这样的:C++ 控制台正在拦截我的所有断言消息,c++,visual-studio-2008,C++,Visual Studio 2008,我有一个简单的断言宏,用于打印消息。这通常在应用程序不是控制台应用程序时起作用(即,我会弹出一个漂亮的对话框,其中的表达式包含我可以点击“重试”进行调试的消息),但当应用程序是控制台应用程序时,控制台会截取所有消息。当控制台隐藏在IDE后面,我必须将其搜索出来,然后返回到断言对话框,点击重试进行调试时,这会变得很烦人 有没有办法阻止它截取消息,这样弹出的对话框就有了所有信息 宏是这样的: #define MyAssert(_Exp, _Msg) assert(_Exp && _M
#define MyAssert(_Exp, _Msg) assert(_Exp && _Msg)
编辑:屏幕截图
CRT试图根据应用程序的类型确定断言输出的目的地。它从可执行文件的类型(/SUBSYSTEM)中检测到这一点。但是,您可以使用_set_app_type覆盖,这样CRT就可以像您的控制台应用程序是Windows应用程序一样工作。更有可能的是,您只是想影响断言,因此应该调用_CrtSetReportMode以更改为_CRTDBG_MODE_WNDW 您没有指定您的VS版本,但这些版本(在VS2003中有细微的命名差异)适用于所有最新版本
MartynCRT试图根据应用程序的类型确定断言输出的位置。它从可执行文件的类型(/SUBSYSTEM)中检测到这一点。但是,您可以使用_set_app_type覆盖,这样CRT就可以像您的控制台应用程序是Windows应用程序一样工作。更有可能的是,您只是想影响断言,因此应该调用_CrtSetReportMode以更改为_CRTDBG_MODE_WNDW 您没有指定您的VS版本,但这些版本(在VS2003中有细微的命名差异)适用于所有最新版本
Martyn当控制台截获消息时,对话框是什么样子的?可能会有帮助:@Mike:我添加了屏幕快照,该对话框不是从您的assert()调用生成的。您的程序因未处理的异常而崩溃。使用Debug+异常进行诊断。@Hans:实际上是。。。我已经测试过了。这是由于assert。当控制台截获消息时,对话框是什么样子的?可能会有帮助:@Mike:我添加了屏幕快照,该对话框不是通过assert()调用生成的。您的程序因未处理的异常而崩溃。使用Debug+异常进行诊断。@Hans:实际上是。。。我已经测试过了。这是由于断言。这篇贴有“visual-studio-2008”标签的文章我第一次错过了。(+1不知道
\u CrtSetReportMode
,很好知道)贴有“visual-studio-2008”标签的帖子第一次就错过了。(+1不知道\u CrtSetReportMode
,很好了解)