本文讲解**.h,该文件可以将调试信息运行时发送到debugview中,
下面是该文件的源代码:
#pragma once
// 本类可以将调试信息运行时发送至DebugView
// 引用至 https://www.codeproject.com/Articles/1053/Using-an-output-stream-for-debugging
// Dxw 2017-04-03
#include <Windows.h>
#include <ostream>
#include <sstream>
#include <string>
template <class CharT, class TraitsT = std::char_traits<CharT> >
class basic_debugbuf :
public std::basic_stringbuf<CharT, TraitsT>
{
public:
virtual ~basic_debugbuf()
{
sync();
}
protected:
int sync()
{
output_debug_string(str().c_str());
str(std::basic_string<CharT>()); // Clear the string buffer
return 0;
}
void output_debug_string(const CharT *text) {}
};
template<>
void basic_debugbuf<char>::output_debug_string(const char *text)
{
::OutputDebugStringA(text);
}
template<>
void basic_debugbuf<wchar_t>::output_debug_string(const wchar_t *text)
{
::OutputDebugStringW(text);
}
template<class CharT, class TraitsT = std::char_traits<CharT> >
class basic_dostream :
public std::basic_ostream<CharT, TraitsT>
{
public:
basic_dostream() : std::basic_ostream<CharT, TraitsT>
(new basic_debugbuf<CharT, TraitsT>()) {}
~basic_dostream()
{
delete rdbuf();
}
};
typedef basic_dostream<char> dostream;
typedef basic_dostream<wchar_t> wdostream;
// 快速使用宏
// 例如: DI<<"结果为:"<<9;
// Dxx为DebugView过滤用的关键字
#define DI wdostream()<<L"MPTC INFO "<<L"\t"
#define DW wdostream()<<L"MPTC WARNING "<<L"\t"
#define DE wdostream()<<L"MPTC ERROR "<<L"\t"
#define DF wdostream()<<L"MPTC FATAL "<<L"\t"
上面的代码引用自:
https://www.codeproject.com/Articles/1053/Using-an-output-stream-for-debugging