2011-05-24 111 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

相關問題