我对C ++很陌生,最近从Linux上的g ++编译转换为Visual Studio。我试着写一个简单的程序来测试这样的东西:
#include <iostream>
void main()
{
// Things
}
我正在使用cout <<
来显示函数返回的内容,然后才意识到它不会以这种方式工作以打印到Visual Studio中的输出窗口。我知道我可以使用调试模式,但在Visual Studio中是否有一种方法可以向窗口显示输出?我发现使用OutputDebugString建议的一篇较旧的帖子,但我没有将代码编写为Win32应用程序,我认为这个函数对于简单的cpp文件不存在。
另外,有没有理由在程序执行时弹出黑色窗口,然后立即消失?
答案 0 :(得分:4)
胜利的OutputDebugString。它确实存在。只需包含windows.h。就在那里。
有一些方法可以有效地将stderr和stdout连接到管道,并将输出重新链接到OutputDebugString,但听起来你正在寻找一种简单的方法。写入stdout(cout,无论如何)的任何东西都将转到控制台窗口,所以在你去OutputDebugString之前先检查你的控制台窗口是否有输出......
说到控制台窗口......
黑色弹出并立即消失的原因是您的控制台窗口正在打开和关闭,并且在完成任何实质性操作之前,您的过程很可能正在完成。在IDE中的main()末尾堵塞断点。然后你可以 Alt + Tab 。
BTW:如果你使用OutputDebugString,它不会对您发送的文本进行CRLF,因此请在输出文本中包含该文本。
答案 1 :(得分:2)
下面是我写的便携式TRACE宏。
在Windows上,它基于OutputDebugString
,如WhozCraig的回答所示。
#ifdef ENABLE_TRACE
# ifdef _MSC_VER
# include <windows.h>
# include <sstream>
# define TRACE(x) \
do { std::stringstream s; s << (x); \
OutputDebugString(s.str().c_str()); \
} while(0)
# else
# include <iostream>
# define TRACE(x) std::clog << (x)
# endif // or std::cerr << (x) << std::flush
#else
# define TRACE(x)
#endif
示例:
#define ENABLE_TRACE // Can depend on _DEBUG or NDEBUG macros
#include "my_above_trace_header.h"
int main (void)
{
int v1 = 123;
double v2 = 456.789;
TRACE ("main() v1="<< v1 <<" v2="<< v2 <<'\n');
}
答案 2 :(得分:0)
如果要从unittest案例中写入输出窗口,则可以使用以下内容:
#include "CppUnitTest.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
TEST_METHOD(testingsomething)
{
Logger::WriteMessage("Hello output window");
}