Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 控制台正在拦截我的所有断言消息_C++_Visual Studio 2008 - Fatal编程技术网

C++ 控制台正在拦截我的所有断言消息

C++ 控制台正在拦截我的所有断言消息,c++,visual-studio-2008,C++,Visual Studio 2008,我有一个简单的断言宏,用于打印消息。这通常在应用程序不是控制台应用程序时起作用(即,我会弹出一个漂亮的对话框,其中的表达式包含我可以点击“重试”进行调试的消息),但当应用程序是控制台应用程序时,控制台会截取所有消息。当控制台隐藏在IDE后面,我必须将其搜索出来,然后返回到断言对话框,点击重试进行调试时,这会变得很烦人 有没有办法阻止它截取消息,这样弹出的对话框就有了所有信息 宏是这样的: #define MyAssert(_Exp, _Msg) assert(_Exp && _M

我有一个简单的断言宏,用于打印消息。这通常在应用程序不是控制台应用程序时起作用(即,我会弹出一个漂亮的对话框,其中的表达式包含我可以点击“重试”进行调试的消息),但当应用程序是控制台应用程序时,控制台会截取所有消息。当控制台隐藏在IDE后面,我必须将其搜索出来,然后返回到断言对话框,点击重试进行调试时,这会变得很烦人

有没有办法阻止它截取消息,这样弹出的对话框就有了所有信息

宏是这样的:

#define MyAssert(_Exp, _Msg) assert(_Exp && _Msg)
编辑:屏幕截图


CRT试图根据应用程序的类型确定断言输出的目的地。它从可执行文件的类型(/SUBSYSTEM)中检测到这一点。但是,您可以使用_set_app_type覆盖,这样CRT就可以像您的控制台应用程序是Windows应用程序一样工作。更有可能的是,您只是想影响断言,因此应该调用_CrtSetReportMode以更改为_CRTDBG_MODE_WNDW

您没有指定您的VS版本,但这些版本(在VS2003中有细微的命名差异)适用于所有最新版本


Martyn

CRT试图根据应用程序的类型确定断言输出的位置。它从可执行文件的类型(/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
,很好了解)