c++ - C++ 更改调试输出的颜色

  显示原文与译文双语对照的内容

我有时使用 DOut ( 下面列出)的类进行调试


 #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;


 }



它工作得很好,除了它与所有的vs 输出信息交错。 例如


'dout.exe': Loaded 'U:GCStestdoutDebugdout.exe', Symbols loaded.


'dout.exe': Loaded 'C:WINDOWSsystem32ntdll.dll'


'dout.exe': Loaded 'C:WINDOWSsystem32kernel32.dll'


'dout.exe': Loaded 'C:WINDOWSWinSxSx86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71fmsvcp90d.dll'


'dout.exe': Loaded 'C:WINDOWSWinSxSx86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71fmsvcr90d.dll'


x = 20


x * x = 400


hexq=400=190


The program '[3108] dout.exe: Native' has exited with code 0 (0x0).



上面的内容并不精确,因为我不知道如何让stackoverflow显示单色文本。 所有的文字都是单色的。 我可以将它输出到一个文件,但这很方便,因为我不总是有一个控制台窗口。

我只是想知道是否可以用不同的颜色输出我的调试信息。 我试过ANSI转义序列,但它们不起作用。

时间: 原作者:

如果我理解正确,你可以借助扩展来做这些事情: VSColorOutput 或者 VSCommands用于 Visual Studio

它们可以更改输出窗口中的外观。 用类输出并创建自己的规则,可以使用框行为或者添加一些特殊字符。

VSColorOutput钩子插入 Visual Studio的分类器链。 这允许VSColorOutput监视发送到输出窗口的每一行。 由 正规表达式 和分类组成的分类器列表。 第一个匹配的表达式确定文本行的分类。 如果没有模式匹配,那么行被分类为通用的构建文本。

...