gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:49:25 28 4
gpt4 key购买 nike

我有时使用类 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:\GCS\test\dout\Debug\dout.exe', Symbols loaded.
'dout.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll'
'dout.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll'
'dout.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\msvcp90d.dll'
'dout.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\msvcr90d.dll'
x = 20
x * x = 400
hexq=400=190
The program '[3108] dout.exe: Native' has exited with code 0 (0x0).

以上内容并不严格准确,因为我不知道如何让 stackoverflow 显示单色文本。所有的文字都只有一种颜色。我总是可以将它输出到一个文件,但这很方便,因为我并不总是有一个控制台窗口,而且我不必担心 chdirs 会改变输出文件的写入位置。

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

最佳答案

如果我没理解错的话,你可以在扩展的帮助下做这些事情:VSColorOutputVSCommands for Visual Studio

它们可以改变输出窗口的外观。在使用 DOut 类输出时,您可以使用开箱即用的行为或添加一些特殊字符,并创建自己的着色规则。

VSColorOutput Hook 到 Visual Studio 的分类器链中。这允许 VSColorOutput 监视发送到输出窗口的每一行。检查由正则表达式和分类组成的分类器列表。第一个匹配表达式确定文本行的分类。如果没有模式匹配,则行被归类为普通构建文本。

关于c++ - 更改调试输出的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32540999/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com