DebugView输出调试信息
在寫windows程序時,需要輸出一些調試信息,這里介紹一種極其方便的方法。即使用OutputDebugString 在Debug模式下輸出調試信息,在Release模式下不輸出。
我們可以在VS的集成平臺上輸出調試信息,也可以使用DebugView來查看調試信息。
 1.)DebugView圖文教程 
 
 
  1、DbgView界面和監控方法
 
打開軟件后,頂部工具欄中選擇監控主機。先看連接本地機調試,點擊“Connect Local”即可。
在這個工具欄上,主要看幾個圖標
此按鈕,表示是否開啟捕獲服務
此按鈕,表示是否捕獲系統內核的Debug信息
此按鈕,表示是否捕獲一般Win32應用,也就相當于我們的應用的Debug信息
?
注意:只有調用了WinDebug中方法的地方的輸出Debug信息才能被DebugView捕獲。
?
再來看看捕獲的應用信息:將打開兩個按鈕的叉叉去掉,就會看到DebugView可能輸出一些信息。如下圖:?
?這些都是系統中的應用調用WinAPI所輸出的Debug信息。但是只有紅色部分是我們的Demo所輸出的信息。
此時我們可以新建過濾器,只查看我們自己想看到的信息打開后我們看到下圖
?
在Include和Exclude,分別表示Debug Print的內容“包含”“不包含”的字符串。
例如在include中輸入:GTA
?
點擊OK后
?
DebugView就會只顯示GTA開頭的Debug信息,因此在寫程序時,為了監控方便,我們可以將Debug信息分類,以不同的前綴或標志為約束,統一Debug輸出格式,方便以后排除和捕獲系統異常等情況。
Exclude與之相反,這里不介紹了。
另外說說,這個按鈕表面顯示的記錄條數。
??
2、遠程捕獲
可以在本機調試捕獲服務器上的Debug信息。
在服務器上新建dbgView.exe程序的快捷方式
?
在快捷方式的“目標“后鍵入:空格+/c字符。然后確定。
再運行快捷方式,服務器就會等待連接。
此時客戶端打開自己的dbgview.exe
?
點擊connect后,輸入服務器的IP地址,便連上服務器了。這樣,用戶可以在本地直接捕獲服務器上的Debug信息了。
主要功能就是這些。另外,如果要在運行時應用不輸出debug信息,可以將web.config或app.config中的
<system.web>
?????????????????? <compilation debug="true" targetFramework="4.0"/>
 設置為false,然后在調用WinDebug的地方就不會再輸出Debug信息了
 
 
2.) 在程序中輸出調試信息
 
 
 參考:
 
- ?http://www.cnblogs.com/mushan/p/3351321.html
 
 
- ?http://www.cnblogs.com/ziwuge/archive/2011/10/31/2230326.html
- http://blog.csdn.net/tanaya/article/details/5774671
要注意OutputDebugString 的格式,注意ASCII和Unicode不一樣。
WINBASEAPI VOID WINAPI OutputDebugStringA( __in_opt LPCSTR lpOutputString ); WINBASEAPI VOID WINAPI OutputDebugStringW( __in_opt LPCWSTR lpOutputString ); #ifdef UNICODE #define OutputDebugString OutputDebugStringW #else #define OutputDebugString OutputDebugStringA #endif // !UNICODE
以下是我截取上面博客中的程序,可以直接使用。
debugPrint.h
//木杉的博客 http://www.cnblogs.com/mushan //2012年6月10日 #ifndef _DEBUGPRINTF_H_ #define _DEBUGPRINTF_H_ #include<Windows.h> #include <tchar.h> //用于輸出信息到編譯器輸出窗口的宏定義 //使用win API,DEBUG版本會執行,RELEASE版本則不會 //還可以使用DebugView,WinDbg等工具查看輸出 #ifdef _DEBUG #define DP0(fmt) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt));OutputDebugString(sOut);} #define DP1(fmt,var) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt),var);OutputDebugString(sOut);} #define DP2(fmt,var1,var2) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt),var1,var2);OutputDebugString(sOut);} #define DP3(fmt,var1,var2,var3) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt),var1,var2,var3);OutputDebugString(sOut);} //格式化輸出調試信息 void OutputDebugPrintf(const char * strOutputString,...) {char strBuffer[4096]={0};va_list vlArgs;va_start(vlArgs,strOutputString);_vsnprintf(strBuffer,sizeof(strBuffer)-1,strOutputString,vlArgs);//vsprintf(strBuffer,strOutputString,vlArgs);va_end(vlArgs);//ASCIIOutputDebugStringA(strBuffer); }#endif #ifndef _DEBUG #define DP0(fmt) ; #define DP1(fmt, var) ; #define DP2(fmt,var1,var2) ; #define DP3(fmt,var1,var2,var3) ; void OutputDebugPrintf(const char * strOutputString,...){}#endif #endif main.cpp
//木杉的博客 http://www.cnblogs.com/mushan //2012年6月10日 #include<stdio.h> #include"debugPrint.h" void main() { OutputDebugPrintf("DEBUG_INFO | %d %s",600019,"北雁\n");for(int i=0;i<10;i++) { printf("hello!\n"); DP0("這是調試信息!\n"); DP1("這是調試信息%d\n",i); DP2("這是調試信息%d--%d\n",i,i+1); DP3("這是調試信息%d--%d--%d\n",i,i+1,i+2); } getc(stdin); }
總結
以上是生活随笔為你收集整理的DebugView输出调试信息的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 【OS学习笔记】二十八 保护模式八:任务
- 下一篇: Roboto 字体
