5

OutputDebugString方法似乎相当乏味,似乎仅限于字符串而不是多态。如果我想输出一些整数或其他变量类型该怎么办?

希望std::cout存在一些类似的功能!

4

5 回答 5

6

我很确定您可以编写一个streambuf通过OutputDebugString. 这并不完全直截了当,但有可能。

当然可以使用这样的东西:

std::stringstream ss;
ss << something << another << variable << here << endl;
OutputDebugString(ss.str().c_str()); 

如果您在项目中启用了“UNICODE”,您可能需要使用MultiByteToWideChar将 c_str() 转换为宽字符串。

于 2013-05-22T08:55:22.860 回答
2

由于接受的答案并没有真正提供工作版本:

如果您不关心 unicode - 尽管您可能应该在运送任何东西时关心它,但我假设您不会在包含 OutputDebugString 的情况下运送它 - 您可以使用其他版本之一,例如OutputDebugStringA

stringstream ss;

ss << "Hello World\n";

OutputDebugStringA(ss.str().c_str());
于 2017-03-10T17:19:52.960 回答
1

使用这样的类:

class stringbuilder
{
public:
  stringbuilder()
  {
  }

  template< class T >
  stringbuilder& operator << ( const T& val )
  {
    os << val;
    return *this;
  }

  operator std::string () const
  {
    return os.str();
  }

private:
  std::ostringstream os;
};

并将输出传递给一个包装器OutputDebugString(或任何其他只记录字符串的东西):

void MyOutputDebugString( const std::string& s )
{
  ::OutputDebugString( s.c_str() );
}

  //usage:
MyOutputDebugString( stringbuilder() << "integer " << 5 );
于 2013-05-22T08:54:03.620 回答
1

Mats Petersson 答案的宏,支持 unicode:

#define odslog(msg) { std::wstringstream ss; ss << msg; OutputDebugStringW(ss.str().c_str()); }

用法:

odslog("A string " << 123123 << L"A wide string" << "\n");
于 2017-05-16T09:00:01.120 回答
0

此外,如果您使用 MFC,那么您可以使用 TRACE TRACE1 TRACE2 ... 像 printf 一样工作的宏到调试输出。

于 2013-05-29T00:53:45.027 回答