WinCE實驗教程之五進階調試

來源:互聯網
上載者:User

作者:文斌
來源:文斌程式網 http://www.wenbinweb.com

        回顧一下我們以前學過的內容,我們學習了嵌入式系統的基本概念,學習了如何定製一個作業系統,還學習了如何引導一個CE作業系統。這次我們來學習CE系統的進階調試技術,主要是利用PB的整合式開發環境來調試作業系統的核心和裝置驅動程式。

        PB整合式開發環境強大的調試功能為我們提供了可以深入調試系統程式的途徑,它的操作方式與常規的整合式開發環境如VC++等非常相似,但功能卻比它們強得多,因為利用PB我們可以調試到一些系統核心部分的程式如核心組件、IE組件,也可以調試各種裝置驅動程式如串口驅動、網卡驅動等,因此,我們才能夠更加方便的定製專用的系統。

        下面我們先來開啟上次我們用的Hello的那個系統,我們定製它時是在模擬器上來類比的,為了講解方便,也為了更多的人能夠方便的學習,我們以後的內容盡量使用模擬器。但是我們必須清楚的意識到,模擬器必竟不是真實的目標機器,哪怕你用一台PC機來作為CE的目標機器都比使用模擬器好,因此有條件的學習者還是使用真實的目標裝置為好。

        我們使用Debug的配置來重新編譯Hello平台,假設目前我們要調試串口裝置的驅動程式,那麼我們先要找到串口驅動程式的來源程式,這個可以通過Workspace視窗來找到,在裝置驅動程式下的串口裝置中找到並雙擊com16550.c來源程式,就可以在主視窗中開啟這個來源程式了,在程式中設定斷點以後當程式執行到斷點處後就會中斷,然後由我們通過在PB中使用調試工具列上的單步跟蹤等調試方法來進行驅動程式的調試,在調試工具列中還可以查看到記憶體、呼叫堆疊、反組譯碼、變數、寄存器等調試工具。由於此處雖然使用核心調試功能,但程式的調試與常規的程式調試方法是相同的,所以此處不做更多的舉例。

       我們來看一下對CE目標裝置的進程、線程等的控制。

       將編譯好的平台下載到目標裝置上,我們開啟Target菜單,使用“CE Processed”命令開啟一個CE的進程管理視窗如:

          在這個視窗中我們可以看到每一個CE進程的資訊,同時在工具列上還可以控制中止某一個進程或開啟某一個進程的線程。

          同樣的,我們使用“CE Threads”命令可以開啟線程視窗如:

          在這個視窗中我們可以通過工具列上的進程列表框來選擇查看某個進程的所有線程的詳細資料,包括呼叫堆疊及各種時間資訊等。

         如果想瞭解目標平台中的模組的地址資訊和重定位資訊等,我們就可以使用“CE Modules and Symbols”功能表命令開啟如下的視窗:

        利用“CE Exceptions”功能表命令則可以改變CE對異常響應的行為,視窗如所示:

        利用以上的四個功能我們可以對CE的進程、線程、模組和異常響應進行必要的管理,也是以後常用的命令。如果想進一步的控制CE,我們還可以使用以下三個命令。

        使用“Run Programs”命令可以在開發機上控制目標機中運行某個指定的程式,此命令運行後開啟的視窗如:

        如果我們在其中選擇iesample.exe然後點擊“Run”按鈕,則會在目標機上發現IE瀏覽器已經運行起來了。如果開發的目標裝置上無顯示功能,則可以通過這個無程運行其中的程式。

        還有一個“CE Target Control”的命令,它可以開啟一個裝置控制視窗,在其中輸入裝置控制命令後也能控制目標裝置動作,如果有興趣使用這些裝置控制命令的話可以查一下PB的協助。

       另一個進階調試功能是使用調試區,它是CE中很常用的調試功能,具體它的代碼實現及要求我們將在裝置驅動程式中進行講解,這裡我們主要看一下它的應用方式,舉個具體的例子,如果我們要跟蹤目標機上鍵盤的動作以查看鍵盤驅動程式的工作情況,那我們就要用到調試區了。執行“CE Debug Zone”命令開啟調試區視窗如:

       左側列表是模組名稱,右側是某一模組對應的調試地區,如上,我們選中kbdmouse.dll模組,右側就列出了該模組的16個調試區,預設已經勾選了三個,所以當這個dll被調入記憶體執行時就會在PB的Debug視窗中輸出它的初始化資訊、警告資訊和錯誤資訊,如果我們想在Debug視窗中得到某個按鍵的掃描碼,那麼只要勾選Scan Codes項就可以了,確定以後,我們到目標裝置上按鍵盤,就可以在開發機PB的Debug視窗上看到如下內容:

1468296 PID:63ef1802 TID:e3ec1eda 0x83ebe9f8: KeybdPdd_GetEventEx2: scan code 0x0000001c, code in progress 0x00000000, previous 0x00000000

1468296 PID:63ef1802 TID:c3ec4062 0x83ef1948: KeybdEventThreadProc: keybd 0 scan code 0x0000001c Down

1468296 PID:63fc9e0a TID:e3ed3e22 0x83eeee44: OpenSwMixer - no mixer found

1468296 PID:63fc9e0a TID:e3ed3e22 0x83eeee44: SPS - open failed : 0x1

1468300 PID:63fc9e0a TID:e3fc5a32 0x83eb1830: OpenSwMixer - no mixer found

1468300 PID:63fc9e0a TID:e3fc5a32 0x83eb1830: SPS - open failed : 0x1

1468425 PID:63ef1802 TID:e3ec1eda 0x83ebe9f8: KeybdPdd_GetEventEx2: scan code 0x000000f0, code in progress 0x00000000, previous 0x0000001c

1468430 PID:63ef1802 TID:e3ec1eda 0x83ebe9f8: KeybdPdd_GetEventEx2: scan code 0x0000001c, code in progress 0x00000000, previous 0x0000001c

1468430 PID:63ef1802 TID:c3ec4062 0x83ef1948: KeybdEventThreadProc: keybd 0 scan code 0x0000001c Up

         這其中就是調試區返回給Debug視窗的資訊,其實質就是在做kbdmouse.dll這個驅動程式時實現了對應的調試區。

        好了,常規調試也好,進階調試也罷,目的只有一個,就是要排除程式中的錯誤,得到必要的資訊,快試試吧!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.