Visual Studio - 如何将调试信息输出到调试窗口?

时间:2013-05-22 08:45:11

标签: c++ visual-studio

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

希望像std::cout这样的函数存在!

5 个答案:

答案 0 :(得分:5)

我很确定你可以编写一个streambuf实现,通过OutputDebugString输出。这不是完全直截了当,但可能。

肯定可以使用这样的东西:

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

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

答案 1 :(得分:2)

由于接受的答案并未真正提供可用的版本:

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

stringstream ss;

ss << "Hello World\n";

OutputDebugStringA(ss.str().c_str());

答案 2 :(得分: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 );

答案 3 :(得分: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");

答案 4 :(得分:0)

此外,如果您使用MFC,那么您可以使用与printf类似的TRACE TRACE1 TRACE2 ...宏来调试输出。