Windows CE 模擬器和遠端偵錯工具

來源:互聯網
上載者:User

本篇文章主要講解遠端偵錯工具的使用方法,並採用PB(Microsoft Platform Builder)下的模擬器來實驗。

 一、模擬器

  模擬器(emulator)是PB的一部分。專用於調試在PB下建立的核心及應用程式。模擬器能夠在PC下類比Windows CE的物理平台。但實際上它只不過是一個運行在CPU Ring 3層級的使用者程式。所以它的運行速度要比正常的物理平台要慢。模擬器僅支援x86平台,它只能調試基於"Emulator:x86"的核心和所有用x86指令集編譯的程式。模擬器有很大的限制,這些限制使它只能運行簡單的應用程式。但是有一點是好的,作業系統的大多數API對於任何CPU而言都是相同的。考慮到不受CPU類型影響的簡單程式,還是可以在模擬器上調試的。在實際開發中我只用模擬器調試軟體的介面。如果你想學習PB,用它來建立核心而又沒有實際的物理平台來調試,那麼模擬器非常適合。但模擬器的限制也非常多,所以即使你在模擬器下調試過所有能夠調試的核心特徵(feature,或者稱組件),你掌握的也不過是冰山一角。在這裡順便說一句閑話:PB包含的知識量和Windows CE本身的知識量加起來好比是浩瀚的海洋,比用EVC開發軟體的知識量大的多。所以如果你只會用EVC開發幾個軟體,那你仍然是Windows CE專業的一年級學生。


圖一 模擬器

關於模擬器的硬體限制:(摘自Windows CE協助)

 

  1. 遠程調用評測程式(Remote Call Profiler)
    遠程調用評測程式包含評測和分析工具。利用圖形映像顯示出你的代碼中演算法的效率或者佔用資源情況。遠程調用評測程式包含一系列介面函數。在你想要評測的代碼中調用這些介面函數,然後運行你編寫的程式。遠程調用評測程式就能夠接收你編寫的程式的資料並記錄。最後利用圖形顯示出來。顯然這個工具我們並不常使用。尤其是開發非即時性核心和軟體,加上目前的嵌入式微處理器處理速度已經很快了,對於一個軟體效能的評測的需求就淡化了。當然,你要是願意,覺得有必要也可以研究一下它的介面函數,然後測一下。我目前可沒這個時間。微軟提供了例子程式"hello"。如果你把Windows CE安裝在C盤,那麼路徑為:
    "C:/Program Files/Common Files/Microsoft Shared/Windows CE Tools/Platman/sdk/wce410/samples/hello"。
    我編譯了此程式並測試了一下。遠程調用評測程式顯示的圖形2所示。

    圖二 評測映像
     

  2. 遠程檔案瀏覽程式(Remote File Viewer)
    遠程檔案瀏覽程式是最常用、最易操作的工具之一。它的作用就是向實際平台匯入或匯出檔案。假如我在調試一個顯示位元影像的程式。位元影像允許使用者自行選擇。那麼要在模擬器下調試,就必須將位元影像檔案先匯入到模擬器中。
    模擬器開啟後,運行遠程檔案瀏覽程式,先彈出一個對話方塊,要你選擇訪問哪個平台。3所示。

    圖三 平台選擇對話方塊

    選擇"Default Device"後。主視窗就顯示出來了。4所示。左邊目錄數列出的是模擬器啟動並執行核心的所有目錄。右邊是指定目錄下的檔案。工具列最右邊是匯入和匯出按鈕。這裡的匯入和匯出是相對開發平台而言的。接上個例子所說,要將一個位元影像檔案傳到模擬器中。先單擊匯出按鈕(上箭頭),在彈出的對話方塊中選擇一個位元影像檔案,確定後,這個檔案就出現在遠程檔案瀏覽程式的右邊檔案視窗中了。匯入也簡單,先選擇一個檔案,再單擊匯入按鈕,再選擇路徑,儲存即可。


    圖四 遠程檔案瀏覽程式

 

3、遠程堆查看程式(Remote Heap Walker)

  顯然“Walker”不能翻譯成“查看”。你願意怎麼翻譯就怎麼翻譯吧。在這裡我就叫查看了,這樣容易理解。從名字就可以看出它是用來查看作業系統中每個進程使用的堆的情況。什麼是堆就不用我說了吧!堆大家都瞭解,但是CE下關於堆的知識也值得一說。以後我會有專門講述CE下進程、線程、和記憶體管理方面的文章發表,那時會說的非常詳細。利用“遠程堆查看程式”能夠查看到:

  • 核心中正啟動並執行進程的名字、ID、及使用的所有的堆的ID。1所示
  • 進程的一個堆中的首地址、結束位址、及標誌(Fixed、Free)
  • 堆中每塊(Block)的實際內容

  • 圖 1 進程列表

      查看和使用這個工具是很簡單的事情。不過前提是你對堆有所瞭解。下面我說說和這個工具有關的涉及到堆的知識。CE下每個進程啟動時,系統會自動分配192KB的局部堆給這個進程。要是不夠你就通過調用堆管理函數自己再分配自訂大小的堆。自己分配的堆,包括系統給你分配的堆,都由ID來標識。中所示的Heap ID。進程ID和進程名就不用說了。後面的“Flag”只有一個值“HF32_DEFAULT”,表示系統預設分配的堆。 圖中的“device.exe”,有四個都一樣。但從進程ID就可以看出這是一個進程,而不是一個應用程式的四個執行個體。因為列表是以堆為單位,“device.exe”分配了四個堆,就顯示了四個。
      雙擊列表中任何一項,彈出這個堆的包含的塊的列表。列出塊的首地址、大小、標誌。我們分配了一個堆,就可以在堆中分配數組、結構等。這個塊就指每個分配的元素。標誌中“Fixed”表示不能釋放這個塊佔據的記憶體空間。而“Free”則相反,表示能夠釋放這個塊佔據的記憶體空間。看到這,也許你會有疑問,標誌給誰看的?由誰釋放啊?這涉及到記憶體的管理,核心的OOM組件。在以後的文章中我會做詳細的解釋。
      再單擊每個塊,在彈出的列表中就可以看到這個塊的具體資料了(用ASCII表示)。

    4、遠程核心跟蹤程式(Remote Kernel Tracker)

      遠程核心跟蹤程式用於跟蹤實際平台核心的執行情況,一般使用它跟蹤核心的啟動情況,搜集相關資料並在開發平台上以圖表形式顯示出來。2所示。這個程式能夠跟蹤所有的進程和進程中的所有線程。從開始運行起跟蹤,跟蹤結束的時間由資料接收緩衝區的大小決定。緩衝區的大小從1MB到100MB,由使用者自己設定。跟蹤內容為進程的運行、不運行,線程的運行、阻塞、睡眠。還有線上程中所有發生的同步事件。在此程式的右邊有所有能夠跟蹤的事件對應的表徵圖。
      要跟蹤一個核心的啟動情況(啟動後也能使用這個程式跟蹤所有進程、線程),先要使你要跟蹤的核心具有幾個特性。在PB菜單“Platform”-“Settings”-“Build Options”中複選“Enable Event Tracking During Boot”和“Enable Profiling”。然後重新編譯整個核心。(注意PB在編譯時間可能提示產生錯誤,如果出現這種情況,那就重建核心)
      編譯成功後,先開啟遠程核心跟蹤程式,在彈出的平台選擇對話方塊中(上篇文章中包含此圖)按“OK”,這時立刻單擊PB的“Download/Initialize”調出模擬器。等待一會遠程核心跟蹤程式就將整個啟動過程中發生的所有情況記錄並顯示出來。哪個時間段線程運行或睡眠或阻塞,包括髮生了哪個中斷都記錄下來。缺點就是資料量太大。這個程式提供了尋找功能和過濾功能。尋找功能可以尋找你想要找的事件,而過濾功能可以讓此程式只記錄你想要的事件。最後還可以儲存這些記錄資料。儲存到副檔名為“.clg”的檔案中。
      這個工具我只能講這麼多了,平時很少用到。


    圖 2 跟蹤情況

    5、遠程效能監控程式(Remote Performance Monitor)

      這個程式的介面大家一定很熟悉了。和其它Windows作業系統中附帶的效能監控器介面非常相似。3所示。操作也幾乎一樣。


    圖3 效能監控程式

      它能夠監視Remote Access Server (RAS)、Internet Control Message Protocol (ICMP)、TCP/IP、User Datagram Protocol (UDP)、Memory、Battery、System、Process、Thread。

    6、遠程進程瀏覽程式(Remote Process Viewer)

      此程式共三個視窗,分別顯示當前核心中所有進程、進程中的線程、及進程中所有載入的DLL。在顯示進程的視窗中,分別顯示進程名、進程ID、基本優先順序層級、擁有的線程總數、基地址、訪問索引值、主視窗名。在顯示線程的視窗中,分別顯示線程ID、當前進程ID、線程優先順序、訪問鍵。在顯示DLL模組的視窗中,分別顯示模組名、模組ID、當前進程使用計數、全域使用計數、基地址、大小、模組控制代碼、路徑。這裡要說明的是線程視窗中的“當前進程ID”。當前進程ID會有不相同的時候,奇怪!線程視窗應該顯示當前指定進程下的所有線程,怎麼會有不同的進程ID呢?因為CE協助中什麼都沒說,所以請允許我設想一下:比如“explorer.exe”,它包含的線程其中就有兩個在“當前進程ID”中顯示為進程“gwes.exe”,“gwes.exe”為圖形、視窗、事件子系統。它負責圖形和視窗以及視窗訊息。“explorer.exe”的線程在顯示視窗、收發訊息時調用“Coredll.dll”(以後會具體講解此DLL),這個DLL調用圖形、視窗、事件模組。這些模組實際上是驅動程式(DLL),由gwes.exe來載入、管理這些DLL。所以顯示當前進程為“gwes.exe”。目前只能這麼解釋了。


    圖4 進程瀏覽程式

    7、遠端登錄編輯程式(Remote Registry Editor)

    此程式和其它Windows 作業系統下的登錄編輯程式非常相似。但它能夠顯示、編譯開發平台下的註冊表和實際平台下的註冊表。5所示。具體操作我就不多說了。CE下註冊表的限制我也曾說過了。


    圖5 登錄編輯程式

    8、遠程訊息監視程式(Remote Spy)

      這個程式和VC下附帶的工具spy非常相似。能夠列出所有實際平台下的視窗和視窗訊息。我想這個程式也不用我多說了吧。熟悉VC下的工具,就能操作這個工具。介面6所示。


    圖6 訊息監視介面

    9、遠程系統資訊(Remote System Information)

    這個工具能夠查看實際平台的系統資訊,包括硬體和軟體的資訊。

    圖7 系統資訊

    10、遠程螢幕程式(Remote Zoom-in)

      此工具能夠截取實際平台螢幕映像。這個工具最適合寫說明書了。假如一個產品要推向市場,那說明書或示範程式必須準備好。用這個程式放到說明書或示範程式中。單擊“File”-“New Bitmap”。這個程式的介面我就不給出了。

    總結

      10個遠程工具為我們開發核心和應用程式提供了很大的協助。顯然有些工具很少用,有些工具常用。對於登錄編輯程式,在一些嵌入式網站有源碼和程式可下載。把登錄編輯程式帶到核心中運行會更有效,更節省時間。這10個工具中,最帥的就是核心跟蹤程式了,通過核心跟蹤程式,整個核心啟動過程清晰可見。還可以用它監視你的應用程式。有一點還要說明:這10個遠端偵錯工具我是在模擬器上實驗的。如果要調試實際平台,必須先通過串口、網卡把開發平台和實際平台串連起來。在“Target”-“Configure Remote Connection”中設定。實際裝置最好有網卡,串口的速度太慢了。這方面請參考說明檔案,協助檔案中說的非常詳細了。

     

  • 僅能類比DEC 2114x 網卡驅動來提供網路支援,其它網卡驅動不支援。
  • 僅能類比FLAT顯示驅動,其它顯示驅動不支援。
  • 不支援USB裝置
  • 不支援PC卡、硬碟、CF卡。
  • 不支援FAT、CDFS、DVD檔案格式。
  • 不支援IEEE1394裝置。
  • 微軟推薦的使用模擬器的開發平台的配置:

  • 1 GHZ CPU
  • 384 MB 系統記憶體
  • 500 MB 可用硬碟空間
  •  二、建立核心並下載到模擬器上

    為了測試遠端偵錯工具,我們必須先使用PB v4.1建立一個核心:

    1. 使用新核心嚮導建立核心:單擊PB的"New Platform",在"step 2"的"Available BSPs"中選擇"EMULATOR:X86",接著在"step 3"的"Available configurations"中選擇一個預定義的核心配置,這些預定義的核心配置具有針對性。在這裡我們選擇"Internet Appliance"。注意:有些預定義的核心配置附帶了外殼程式,有些沒帶。選擇之後,填寫工程名(例如Internet)和工程的儲存路徑。預設"step 4"的選項,在"step 5"中去掉所有複選框。因為我們只要核心和外殼就行了。同樣去掉"step 6"中所有複選框。最後一步單擊"Done"按鈕。
    2. 編譯這個新核心:在菜單"Platform"-"Settings"-"Environment"中,單擊"New",在彈出對話方塊中添加變數名"IMGRAM64"和值"1"。然後單擊"Build"-"Build Platform"開始編譯。具體編譯的時間和你的機器配置有很大關係。
    3. 配置模擬器:編譯成功後,單擊"Target"-"Configure Remote Connection",在彈出的對話方塊中找到"Download"下拉框,選擇"Emulator",單擊後面的"Configure",在彈出的對話方塊中設定解析度為800 X 600或640 X 480。系統記憶體設定為64MB。單擊"OK"後,在"Kernel"下拉框中選擇"Emulator"。單擊"OK"。
    4. 啟動模擬器:單擊"Target"-"Download Initialize"。等待一會,模擬器就出來了。可以看到標準外殼的介面,也就是案頭。

    在PB中編寫一個應用程式並下載到模擬器:

    1. 在開啟了核心工程的前提下(如果剛開啟PB,先開啟一個核心工程)。單擊PB菜單"File"-"New Project or FIle"。餘下的步驟我就不用多說了。和EVC一樣,添個工程名就可以編碼了。只是沒有MFC、ATL的支援。在這裡選擇一個顯示"hello world"的SDK程式。然後單擊"Build"-"Build All"編譯器。我一般不在PB下開發軟體。麻煩!
    2. 在模擬器已經開啟的前提下,單擊"Target"-"Run Programs",找到你的程式名,再單擊"Run"。在模擬器上就可以看到你的程式了。
    3. 關閉操作:先關閉模擬器。再單擊"Target"-"Disconnect"。

     三、遠端偵錯工具

      遠端偵錯工具用於在開發平台與實際平台間執行一些調試工作。利用遠端偵錯工具可以在開發平台運行,得到實際平台上的檔案、監視實際平台上進程或線程的狀況、測試實際平台上應用程式的效能等。一部分遠端偵錯工具是我們在開發應用程式時常用的,還有一部分是開發核心時常用的。對於不常用的遠端偵錯工具,我在這裡只給予簡單的介紹。

    相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.