這樣程式的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. 完成
沒有留言:
張貼留言