2010年7月27日 星期二

DEBUGZONE

善用DEBUGZONE是很重要的
這樣程式的DEBUG輸出才會條理不容易亂
不過常常忘記DEBUGZONE 的用法
現在把它整理後寫在這邊


1.  Define DEBUGZONE



#define ZONE_INIT   DEBUGZONE(0)
#define ZONE_TEST   DEBUGZONE(1)
....


2. 定義 dpCurSettings

如以下


#ifdef DEBUG
DBGPARAM dpCurSettings = {
    TEXT("USBPRN"), {
    TEXT("Errors"),    TEXT("Warnings"),  TEXT("Init"),        TEXT("Trace"),
    TEXT("LPT_INIT"),  TEXT("LPT_READ"),  TEXT("LPT_WRITE"),   TEXT("LPT_IOCTL"),
    TEXT("USB_PARSE"), TEXT("USB_INIT"),  TEXT("USB_CONTROL"), TEXT("USB_BULK"),
    TEXT("Undefined"), TEXT("Undefined"), TEXT("Undefined"),   TEXT("USBCLIENT")
    },
     0x0003 // ZONE_WRN|ZONE_ERR
};
#endif  // DEBUG


DBGPARAM 的第三個參數 zonemask 決定哪個DEBUG MSG打開

3. 使用 DEBUGREGISTER macro
在程式進入點的地方 call DEBUGREGISTER



BOOL
DllEntry(
   HANDLE hDllHandle,
   DWORD  dwReason,
   LPVOID lpreserved
   )
{
    UNREFERENCED_PARAMETER(hDllHandle);
    UNREFERENCED_PARAMETER(lpreserved);
    switch (dwReason) {

      case DLL_PROCESS_ATTACH:
           DEBUGREGISTER((HINSTANCE)hDllHandle);
  DisableThreadLibraryCalls((HMODULE) hDllHandle);
           break;

      case DLL_PROCESS_DETACH:
           break;

      default:
        break;
    }
    return TRUE;
}

一般程式(非DLL)的話,使用DEBUGREGISTER(NULL);

DEBUGREGISTER 只有在 DEBUG BUILD 中才有定義
而 RETAILREGISTERZONES 用在DEBUG 及 RETAIL BUILD 中

4. 完成

沒有留言: