C++ 更改调试输出的颜色
我有时使用类DOut(如下所列)进行调试C++ 更改调试输出的颜色,c++,visual-studio,C++,Visual Studio,我有时使用类DOut(如下所列)进行调试 #include<fstream> #include<iostream> #include<sstream> #define WIN32_LEAN_AND_MEAN #include<Windows.h> #ifdef UNICODE #define tostream wostream #define tostringstream wostringstream #def
#include<fstream>
#include<iostream>
#include<sstream>
#define WIN32_LEAN_AND_MEAN
#include<Windows.h>
#ifdef UNICODE
#define tostream wostream
#define tostringstream wostringstream
#define _T(x) L##x
#else
#define tostream ostream
#define tostringstream ostringstream
#define _T(x) x
#endif
class DOut : public std::tostringstream
{
public:
//http://stackoverflow.com/questions/2212776/overload-handling-of-stdendl
DOut& operator << (std::tostream&(*f)(std::tostream&))
{
if (f == std::endl)
{
*this << _T("\n");
OutputDebugString(str().c_str());
str(_T(""));
}
else
{
*this << f;
}
return *this;
}
//https://hbfs.wordpress.com/2010/12/21/c-logging/
template <typename TT>
inline DOut & operator << (const TT& t)
{
(*(std::tostringstream*) this) << t;
return *this;
}
};
int main()
{
DOut dout;
int x = 20;
dout << "x = " << x << std::endl;
dout << "x * x = " << x * x << std::endl;
dout << "hexq=" << x*x << "=" << std::hex << x * x << std::endl;
}
以上内容并非严格准确,因为我不知道如何让stackoverflow显示单色文本。所有的文字只有一种颜色。我总是可以将它输出到一个文件中,但这很方便,因为我并不总是有一个控制台窗口,我也不必担心chdirs会改变输出文件的写入位置
我只是想知道是否有可能输出不同颜色的调试信息。我尝试过ANSI转义序列,但它们不起作用。如果我理解正确,您可以借助扩展来完成这些事情:或者
它们可以更改输出窗口中的外观。当使用DOut类输出时,您可以使用开箱即用的行为或添加一些特殊字符,并创建自己的规则如何为其着色
VSColorOutput钩住Visual Studio的分类器链。这允许VSColorOutput监视发送到输出窗口的每一行。将检查由正则表达式和分类组成的分类器列表。第一个匹配表达式确定文本行的分类。如果没有匹配的模式,则该行被归类为通用构建文本。事实上,答案比我想象的要简单。只需在“输出”窗口中单击鼠标右键,然后选择“程序输出”。它只显示程序输出,而不显示所有其他位。不需要颜色
另外,从VS2005到当前版本都可以使用它,而无需为VS的不同版本安装不同的Visual Studio扩展。定义
\u T
宏是一个特别糟糕的主意,因为它已经存在于tchar.h中<代码>\u T无论如何都是一个错误。由于您使用的是OutputDebugString
,您可能需要下载或创建自己的调试捕获工具,该工具可以识别您想要支持的任何终端转义代码。其实没那么难。那些工具是做什么的?你认为他们的地址是哪一部分?为什么您的链接中缺少此信息?它们可以更改输出窗口中的外观。您可以使用开箱即用的行为,或在使用DOut类输出时添加一些特殊字符,并创建自己的规则如何为其着色。应下载此扩展以使用。因此,为了节省您的时间,我通过谷歌搜索添加了链接=)谢谢您的反馈-我更新了一点我的答案。我查看了VSColorOutput-他们的更多信息链接会转到一些泰国网页。我想我会先在虚拟机上试用这些。我真的不相信链接,当他们去某个不知名的地方。