Build DebugOutputString

Build DebugOutputString

本文关键字:DebugOutputString Build      更新时间:2023-10-16

除了这个,还有其他连接DebugOutputString的可能性吗?

std::ostringstream outs;   
outs.precision(6);
outs << mMainWndCaption << _T("FPS: ") << fps;
DebugOutputString(_T(outs.str().c_str()));

也许更容易输出像在printf?

我正在寻找类似DebugOutputString(_T("FPS: %i", fps));的东西,例如

ostringstream方法的一个问题是,如果您正在构建unicode应用程序,可能会遇到有趣的结果。我猜你在这里没有使用unicode,如:

DebugOutputString(_T(outs.str().c_str()));

将不会编译-它将预处理为:

DebugOutputString(Louts.str().c_str());

即使要正确地完成它,您也需要根据您的项目设置有条件地使用basic_ostringstream<char>basic_ostringstream<wchar_t>。但是我离题了。


看一下FormatMessage API调用。使用它有一些注意事项,例如系统是否为您分配内存,如果是,您需要删除缓冲区,等等。它有一些稍微不同的格式选项。但是它会做你想做的事情。

在你的情况下,你可以写一个方法,将你的参数直接传递给DebugOutputString -事实上,API页面提供了一个例子,返回一个格式化的缓冲区…你只需要记得在使用后将其LocalFree

这里是一个简短的版本:

void OutputFormattedDebug(LPTSTR pMsg, ...) {
    LPTSTR pBuffer = NULL;
    va_list args = NULL;
    va_start(args, pMsg);
    FormatMessage(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ALLOCATE_BUFFER, pMsg, 0, 0, (LPTSTR)&pBuffer, 0, &args);
    va_end(args);
    if (pBuffer) {
        OutputDebugString(pBuffer);
        LocalFree(pBuffer);
    }
}
...
OutputFormattedDebug(TEXT("Just a test: %1n"), TEXT("Hello"));

在调试窗口中输出Just a test: Hello。如果你指定宽度和其他东西,它会变得有点奇怪,但看看文档应该会帮你理清头绪。

就在昨天,我把它放到了我自己的一个项目中。
也许它会帮助你:

void DebugWrite(LPCTSTR format, ...)
{
    CString text;
    va_list args;
    va_start(args, format);
    text.FormatV(format, args);
    va_end(args);
    OutputDebugString((LPCTSTR)text);
}

你可以这样调用它:

DebugWrite(_T("FPS: %i"), fps);
相关文章:
  • 没有找到相关文章