看過《深入淺出MFC》嗎,候捷先生在書的最後提到了一種追蹤TRACE(實際上是Windows函數OutputDebugString)的工具.有了該工具,你就可以在應用程式運行時通過它觀察追蹤應用程式內部的運行情況,只要你在程式中加了足夠多的TRACE宏,並且以Debug版本編譯. 特別是對於程式邏輯複雜(Debug幾次就暈了),或者涉及到圖形介面重新整理或顯示的程式(如果用一台電腦調試,在Visual C++環境和被偵錯工具之間切換,你很難看到正確的結果),或者非常耗費系統資源的程式(在用Visual C++調試運行,就更費勁了),巧妙的使用這類工具可以高效的解決問題。 說實話,Paul DiLascia等大師固然提供了這些工具,但是這些大師只是為了展示某些技術,所以他們提供的工具都只有準系統。
而DebugView是同類工具中最為優秀的一個,適用範圍廣,能夠定製各種過濾條件,讓你只看到關心的TRACE輸出資訊,而且可以定製高亮顯示的內容等等,非常方便。 DebugView是完全免費的!
目前DebugView的最新版本是v4.76,是http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx,使用說明http://read.newbooks.com.cn/info/196819.html
另外在網上還找到一個漢化的版本http://www.pudn.com/downloads116/sourcecode/windows/detail493993.html
說明:
DbgView與DT的功能基本上相同,在DT的基礎上增加了過濾訊息的功能,這樣就可以過濾掉一些對自己沒有用的調試資訊。
v1.3.0.52
1、增加調試資訊儲存到檔案功能。
v1.2.1.1
1、增加過濾掉某些包含的字串功能
v1.1.0.1
1、如何整合到程式中
只需將原來的函數替換即可。要替換成新的函數內容如附1。
2、如何過濾。
過濾分為顯示包含某些字串的訊息、過濾掉某些包含字串的訊息。
目前只實現了顯示包含某些字串的調試訊息。
使用如例:如顯示所有包含Hello的調試訊息,只需在過濾器的包含中設定字串Helllo;即可。
如顯示所有包含Hello或haha的調試訊息,只需設定如下Hello;haha;即可
3、如果不能運行可以是沒有裝vc8.0的運行庫建議安裝這個運行庫。放在同一個目錄下檔案名稱為vcredist_x86.exe的程式。
附1
BOOL DebugTrace(char * lpszFormat,...)
{
static HWND hwnd = ::FindWindowA(NULL, "DbgView");
if(!IsWindow(hwnd))
hwnd = ::FindWindowA(NULL, "DbgView");
if(hwnd)
{
static char szMsg[512];
va_list argList;
va_start(argList, lpszFormat);
try
{
vsprintf(szMsg,lpszFormat, argList);
}
catch(...)
{
strcpy(szMsg ,"DebugHelper:Invalid string format!");
}
va_end(argList);
DWORD dwId = GetCurrentProcessId();
::SendMessage(hwnd,WM_SETTEXT,dwId,(LPARAM)(LPCTSTR)szMsg);
}
return TRUE;
}
註:本文參考了文章 http://feisky.wordpress.com/2009/03/08/visual-c-%e5%bc%80%e5%8f%91%e8%be%85%e5%8a%a9%e5%b7%a5%e5%85%b7%e5%a4%a7%e6%94%b6%e9%9b%86/