将输出锁定到Visual Studio中的“输出”窗口

问题描述

| 我的应用程序使用“ 0”宏将调试数据发送到Visual Studio中的“输出”窗口。其中一些输出字符串是使用对
TRACE
宏的多次调用构建的,如以下代码片段所示:
BYTE i,len;

len = pMsg[APP_LEN_OFFSET] + sizeof(appPktHead_t) - APP_MSG_CODE_LEN;

TRACE(_T(\"%s: \"),fnName);
TRACE(GetCmdIdStr( pMsg[APP_MSG_CODE_OFFSET] ));
TRACE(_T(\" 0x\"));

for ( i = 0; i < len; i++ )
{
    TRACE(_T(\"%.2X \"),pMsg[i]);
}

TRACE(_T(\"\\r\\n\"));
如何在此功能持续时间内将输出锁定到“输出窗口”,或在一次调用中将整个字符串发送给“ 0”?谢谢。     

解决方法

我不相信有一种方法可以在Visual Studio中锁定输出窗口。我认为最简单的方法是将整个消息构建为
std::stringstream
wchar_t[]
对象,然后将该单个值输出到
TRACE
宏 自从我使用ѭ7以来已经有一段时间了,所以这里可能会出现一些错误,但是以下内容应该可以使您走上正确的轨道
std::stringstream stream;
stream << fnName << \": \";
stream << GetCmdIdStr( pMsg[APP_MSG_CODE_OFFSET] );
stream << \" 0x\";
for ( i = 0; i < len; i++ )
{
    stream << pMsg[i] << \" \";
}

stream << \"\\r\\n\";
TRACE(stream.str().c_str());
    ,使用
TRACE
宏之前,请构建一个字符串。
byMsgLen = pMsg[DEV_LEN_OFFSET] + sizeof(devPktHead_t) + sizeof(devPktTail_t);
cmd = pMsg[DEV_CMD_MSB_OFFSET];
cmd <<= 8;
cmd |= pMsg[DEV_CMD_LSB_OFFSET];
pCmdIdStr = GetCmdIdStr( cmd );
iPreOffset = ::wcsnlen_s(fnName,128)       // function name
    + 2                                     // \": \"
    + ::wcsnlen_s(pCmdIdStr,128)           // command ID string
    + 3;                                    // \" 0x\"
iPostOffset = iPreOffset + byMsgLen * 3;    // \"%.2X \" (formatted: 2 hex-nibble bytes and space)
iStrLen = iPostOffset + 3;                  // \"\\r\\n\\0\"
pBuf = (wchar_t *)malloc( iStrLen * sizeof(wchar_t) );

::swprintf_s( pBuf,iStrLen,_T(\"%s: %s 0x\"),fnName,pCmdIdStr);

for ( i = iPreOffset; i < iPostOffset; i += 3 )
{
    ::swprintf_s( &(pBuf[i]),4,_T(\"%.2X \"),pMsg[j++] );
}

::swprintf_s( &(pBuf[i]),3,_T(\"\\r\\n\") );

TRACE( pBuf );

::free( pBuf );