日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DebugView输出调试信息

發布時間:2023/12/10 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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输出调试信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。