WinCE 5 0邊做邊學 5

2021-04-14 01:40:51 字數 2278 閱讀 8407

對於實時系統,如何除錯是乙個很難解決的問題,包括對系統核心的除錯,對驅動程式的除錯,對應用程式的除錯等。對於應用程式,通常各整合開發環境都提供了常規的單步跟蹤等除錯手段。而對於另兩個的除錯,platform builder除了為我們提供了常規的斷點跟蹤等手段以外,還和系統的源程式配合使用了一種新的除錯手段——debug zones除錯區。

通常,我們都是利用outpubdebugstring函式來實現除錯資訊的輸出的,但是由於系統底層的除錯資訊非常繁多,如果這樣大量的除錯資訊用於實時輸出的話一定會影響到系統的效能和實時性,也就影響到了系統的執行。如果有一種方式能允許開發人員自己選擇輸出哪些除錯資訊,不輸出哪些除錯資訊的話,那麼就可以讓開發人員只看到關心的除錯資訊,而把諸如鍵盤按鍵、滑鼠移動等無用的除錯資訊隱去,則可以更好的提高開發效率,迅速找到問題所在。

除錯區就是為了解決以上提出的問題的,對某乙個驅動程式,它規定好自己向外輸出的除錯資訊的分類,比如初始化時的資訊,出錯時的資訊,釋放時的資訊,啟用時的資訊等,然後分成幾個除錯區,在現有的ce版本中最多允許16個除錯區。開發人員通過platform builder中target選單下的ce debug zones命令來決定想要得到哪乙個或哪幾個除錯區的資訊,在驅動程式中則可以根據開發人員的選擇來輸出指定除錯區的資訊。這就是除錯區大體上的工作原理。

接下來,我們就來看一下除錯區的定義,宣告,註冊及使用。

在程式中使用除錯區之前必須先定義它們,乙個程式的16個除錯區編號分別為0-15。**樣例如下所示:

#ifdef debug

//// for debug builds, use the real zones.

//#define zone_test debugzone(0)

#define zone_params debugzone(1)

#define zone_verbose debugzone(2)

……#define zone_warn debugzone(14)

#define zone_error debugzone(15) #else

//// for retail builds, use forced messages based on the zones turned on below.

//#define zone_test 0

#define zone_params 0

#define zone_verbose 0

……#define zone_warn 0

#define zone_error 0

#endif

這樣,就可以程式的debug版本中使用除錯區了,而在release版本中則將其全部定義為0,除錯資訊即不再輸出。

在程式中,除了以上的定義以外,還要宣告幾個專用的除錯資訊輸出函式,這些函式與outputdebugstring函式的區別就在於在呼叫時需要指定對應的除錯區,這些函式以及以上用到的debugzone巨集的定義都在dbgapi.h標頭檔案中,因此只要在源程式中包含此標頭檔案即可。除此以外,還需要乙個全域性的debparam型別的變數命名為dpcursettings,以供整合開發環境和除錯資訊輸出函式使用。其**樣例如下:

#ifdef debug

dbgparam dpcursettings =

,(1 << 15) // errors

| (1 << 14) // warnings

}; #endif

此例中還把error和warn除錯區作為預設被開發人員選中的除錯區。

要想使用除錯區,還需要做的最後一件準備的事情就是在程式中進行註冊,也就是在程式啟動時通知整合開發環境本程式中要使用除錯區,這個註冊很簡單,只要在程式的入口處使用debugregister巨集即可,樣例如下:

dllentry (

handle hinstdll,

dword op,

lpvoid lpvreserved){

switch (op) {

case dll_process_attach :

debugregister((hinstance)hinstdll);

break;

……至於除錯區的使用,完全是幾個巨集的使用而已,我想做程式的人都會用的,常用的巨集如下:

debugmsg(),debugled(),retailmsg(),retailled(),errormsg(),debugchk()

好了,除錯區就概要的說了這麼多,如此複雜的機制在自己的程式中寫起來是煩瑣了點,不過如果你需要的話,可以從ce現有的例程式中複製過來,這樣就省了很多麻煩事,也不會出錯。下圖是在pb中使用除錯區的截圖,當選中某乙個除錯區後,如果該除錯區有除錯資訊則會在debug視窗輸出的。自己試試吧!

WinCE 5 0邊做邊學 5

對於實時系統,如何除錯是乙個很難解決的問題,包括對系統核心的除錯,對驅動程式的除錯,對應用程式的除錯等。對於應用程式,通常各整合開發環境都提供了常規的單步跟蹤等除錯手段。而對於另兩個的除錯,platform builder除了為我們提供了常規的斷點跟蹤等手段以外,還和系統的源程式配合使用了一種新的除...

WinCE 5 0邊做邊學 3

主頁 文斌程式網 我們重點要說的還是ce的生成過程,即你在編譯平台的時候platform builder到底為你做了些什麼?實際上,ide在生成ce的過程當中共經歷了四個階段,分別是sysgen build copy make,即元件生成階段,編譯階段,release資料夾複製階段和映象打包階段。下...

WinCE 5 0邊做邊學 8

handle hdevice define bufsize 256 wchar buffer bufsize bool apientry dllmain handle hmodule,dword ul reason for call,lpvoid lpreserved handle ttt init...