OutputDebugString
方法似乎相当乏味,似乎只限于字符串而不是多态。如果我想输出一些整数或其他变量类型,我该怎么办?
希望像std::cout
这样的函数存在!
答案 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 ...宏来调试输出。