OutputDebugString 加強版(Debug)

  當一個大型程序中存在着一個非常隱蔽的錯誤(所謂隱蔽,指的是我從運行過程中發現程序不正常,但是即使檢查源代碼,也很難發現何處存在錯誤),於是乎,我們在運行過程中添加一些輸出語句,把中間結果或者程序狀態輸出出來,根據大量的結果來推測程序究竟出錯在何處。這種情況是絕非程序斷點能夠搞定的,因爲有時候你斷無可斷(特別是對於DLL程序的調試)。由於我們輸出的debug信息只能由Dbmon.exe(或Dbgview.exe)來顯示。所以,即使程序發佈之後,也無須去掉這些調試點,這樣對以後排錯也很有利。

  OutputDebugString 是微軟提供給我們用於輸出調試信息的API函數,但是它只能直接輸出的是字符串,而像GetLastError()返回數字型的的信息,需要經過類型轉換(使用itoa將整型轉換爲字符數組)才能輸出,比較麻煩。我們需要一種類似於printf函數的信息輸出函數,它可以支持輸出任何類型,任何個數的數據,例如:

printf("地址: %p,字符串: %s,錯誤號:%d\n ",p1,szStr,GetLastError());

  下面的一個自定義的調試信息輸出函數(MyDebug),它實現了我們期望的功能,經過我在項目中的實際使用,發現效果很不錯。

#include <stdarg.h>
#include <stdio.h>
#include <windows.h>

void MyDebug(const char sz, ...)
{
char szData[512]={0};

va_list args;
va_start(argssz);
_vsnprintf(szDatasizeof(szData) - 1szargs);
va_end(args);

OutputDebugString(szData);
}



使用起來很簡單,和printf函數調用格式基本一樣,例如:

MyDebug("地址: %p,字符串: %s,錯誤號:%d\n ",p1,szStr,GetLastError());

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