2011-05-24 113 views
1

我的应用程序使用TRACE宏将调试数据发送到Visual Studio中的输出窗口。一些输出字符串使用多次打电话给TRACE宏建,如显示在下面的代码片段:在Visual Studio中将输出锁定到输出窗口

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")); 

我无论怎样才能锁定输出到输出窗口此功能的持续时间,或者在一次呼叫中将整个字符串发送到TRACE?谢谢。

回答

1

建立一个字符串上,使用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); 
2

我不相信有一种方法来锁定Visual Studio中的输出窗口。我认为,要做到这一点最简单的方法是将整个信息建立成std::stringstreamwchar_t[]对象,然后输出单值的TRACE宏观

一段时间去过,因为我用stringstream所以有可能在这里的几个错误,但下面应该让你在正确的轨道

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()); 
+0

@JaredPar:谢谢。它排序的工作,但我现在在输出窗口中得到一些奇怪的输出。看看这个截屏(http://tinypic.com/r/2v9b588/7)。奇数字体应该是输出字符串的位置,但显示的字符串的唯一部分是函数名称,其余部分是加密的。 – 2011-05-24 21:38:38

+1

@Jim它看起来像问题是unicode和ASCII的混合。我会尝试'wstringstream',看看是否解决了问题 – JaredPar 2011-05-24 22:03:18

+0

@Jim Fell,奇怪的输出是因为它将字节视为字符。简单的解决方法是将'pMsg [i]'强制转换为int。此外,由于您似乎试图以十六进制输出,所以在输出值之前不要忘记std :: hex修饰符。 – 2011-05-24 22:04:08

相关问题