DbgView使用

一 DbgView簡介

Sysinternals公司的系列調試工具。
debugview 可以捕獲程序中由TRACE(debug版本)和OutputDebugString輸出的信息。

Debug信息捕獲軟件
  可以很方便的捕獲系統實時輸出的Debug信息,並保存爲日誌文件。可以遠程捕獲服務器上的Debug信息。  比較方便開發人員在系統發佈前監控一些系統流程和異常,甚至在系統不大的情況下,更能在部署後進行遠程監控功能。
二 實際操作

Computer菜單下可選擇連接的計算機,默認連接本機;

輸入IP或名字可連遠程計算機;

 

下面四個按鈕,第一個放大鏡的,控制捕獲的打開或關閉;第二個控制是否捕獲系統內核的Debug信息;第三個控制是否捕獲Win32應用的Debug信息;

 

這是本機捕獲的情況;

 

這是本機捕獲的情況;

 

下面四個按鈕,第一個放大鏡的,控制捕獲的打開或關閉;第二個控制是否捕獲系統內核的Debug信息;第三個控制是否捕獲Win32應用的Debug信息;

 

這是本機捕獲的情況;

點擊漏斗型按鈕,打開過濾器設置,在Include中輸入TRACE,在Exclude中輸入WAIT_TIMEOUT;這樣就只顯示帶字符串“TRACE”的debug信息,不顯示帶“WAIT_TIMEOUT”的調試信息;

 

過濾以後的結果;

漏斗型按鈕旁邊的按鈕控制顯示記錄的條數;下圖顯示16條;

捕獲菜單中,默認捕獲的是Win32,Pass-Through,Events;全局Win32,內核等,默認沒有捕獲;

 

選項菜單,可以選擇是否顯示Win32進程ID,是否滾動顯示等;

 

三 TRACE宏和Dbgview

http://blog.163.com/gou_ya/blog/static/102080580200810274839532/

debugview  

1、用debugview,打開debugview,運行你的debug版本程序,可以定位到源文件的某一行。

2、包含stdlib.h crtdbg.h 兩個頭文件
在程序開始處添加 #define _CRTDBG_MAP_ALLOC
在程序結束處添加 _CrtDumpMemoryLeaks();
比如

#define _CRTDBG_MAP_ALLOC

int main(void)
{
char *p = new char;
return 0;

_CrtDumpMemoryLeaks();
}

運行debug版本的程序。在輸出信息欄裏會有內存泄露信息,可以定位到某一行
以上兩種方法不是沒種泄露都能定位,如果不能,會輸出內存泄露信息和發生泄漏的模塊,那就要自己想想,什麼地方出現了泄露

TRACE宏對於VC下程序調試來說是很有用的東西,有着類似printf的功能;該宏僅僅在程序的DEBUG版本中出現,當RELEASE的時候該宏就完全消失了,從而幫助你調試也在RELEASE的時候減少代碼量。

使用非常簡單,格式如下:

TRACE("DDDDDDDDDDD");
TRACE("wewe%d",333);

同樣還存在TRACE0,TRACE1,TRACE2。。。分別對應0,1,2。。個參數
TRACE信息輸出到VC IDE環境的輸出窗口(該窗口是你編譯項目出錯提示的那個窗口),但僅限於你在VC中運行你的DEBUG版本的程序。
TRACE信息還可以使用DEBUGVIEW來捕獲到。這種情況下,你不能在VC的IDE環境中運行你的程序,而將BUILD好的DEBUG版本的程序單獨運行,這個時候可以在DEBUGVIEW的窗口看到DEBUGVIE格式的輸出了。

VC中TRACE的用法有以下四種:

1:
TRACE ,就是不帶動態參數輸出字符串, 類似C的printf("輸出字符串");

2:
TRACE 中的字符串可以帶一個參數輸出 , 類似C的printf("...%d",變量);

3:
TRACE 可以帶兩個參數輸出,類似C的printf("...%d...%f",變量1,變量2);

4:
TRACE 可以帶三個參數輸出,類似C的printf("...%d,%d,%d",變量1,變量2,變量3);

TRACE 宏有點象我們以前在C語言中用的Printf函數,使程序在運行過程中輸出一些調試信息,使我們能瞭解程序的一些狀態。但有一點不同的是:
TRACE 宏只有在調試狀態下才有所輸出,而以前用的Printf 函數在任何情況下都有輸出。和Printf 函數一樣,TRACE函數可以接受多個參數如:

int x = 1;
int y = 16;
float z = 32.0;
TRACE( "This is a TRACE statement\n" );
TRACE( "The value of x is %d\n", x );
TRACE( "x = %d and y = %d\n", x, y );
TRACE( "x = %d and y = %x and z = %f\n", x, y, z );

要注意的是TRACE宏只對Debug 版本的工程產生作用,在Release 版本的工程中,TRACE宏將被忽略。

 
四 C#中使用

  在C#中的使用方法:  將WinDebug.cs加入到項目中,也可以編譯成.dll文件引入。然後在程序中需要輸出調試信息調用即可。

另外,如果要在運行時應用不輸出debug信息,可以將web.config或app.config中的 <system.web>   <compilation debug="true" targetFramework="4.0"/> 設置爲false,然後在調用WinDebug的地方就不會再輸出Debug信息了
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章