<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Windows CE 模擬器和遠程調試工具

Windows CE 模擬器和遠程調試工具

作者: 時(shí)間:2011-02-25 來(lái)源:網(wǎng)絡(luò ) 收藏
本篇文章主要講解遠程調試工具的使用方法,并采用PB(Microsoft Platform Builder)下的模擬器來(lái)試驗。

一、模擬器

  模擬器(emulator)是PB的一部分。專(zhuān)用于調試在PB下創(chuàng )建的內核及應用程序。模擬器能夠在PC下模擬Windows CE的物理平臺。但實(shí)際上它只不過(guò)是一個(gè)運行在CPU Ring 3級別的用戶(hù)程序。所以它的運行速度要比正常的物理平臺要慢。模擬器僅支持x86平臺,它只能調試基于"Emulator:x86"的內核和所有用x86指令集編譯的程序。模擬器有很大的限制,這些限制使它只能運行簡(jiǎn)單的應用程序。但是有一點(diǎn)是好的,操作系統的大多數API對于任何CPU而言都是相同的??紤]到不受CPU類(lèi)型影響的簡(jiǎn)單程序,還是可以在模擬器上調試的。在實(shí)際開(kāi)發(fā)中我只用模擬器調試軟件的界面。如果你想學(xué)習PB,用它來(lái)創(chuàng )建內核而又沒(méi)有實(shí)際的物理平臺來(lái)調試,那么模擬器非常適合。但模擬器的限制也非常多,所以即使你在模擬器下調試過(guò)所有能夠調試的內核特征(feature,或者稱(chēng)組件),你掌握的也不過(guò)是冰山一角。在這里順便說(shuō)一句閑話(huà):PB包含的知識量和Windows CE本身的知識量加起來(lái)好比是浩瀚的海洋,比用EVC開(kāi)發(fā)軟件的知識量大的多。所以如果你只會(huì )用EVC開(kāi)發(fā)幾個(gè)軟件,那你仍然是Windows CE專(zhuān)業(yè)的一年級學(xué)生。


圖一 模擬器

關(guān)于模擬器的硬件限制:(摘自Windows CE幫助)
  • 僅能模擬DEC 2114x 網(wǎng)卡驅動(dòng)來(lái)提供網(wǎng)絡(luò )支持,其它網(wǎng)卡驅動(dòng)不支持。
  • 僅能模擬FLAT顯示驅動(dòng),其它顯示驅動(dòng)不支持。
  • 不支持USB設備
  • 不支持PC卡、硬盤(pán)、CF卡。
  • 不支持FAT、CDFS、DVD文件格式。
  • 不支持IEEE1394設備。
  • 微軟推薦的使用模擬器的開(kāi)發(fā)平臺的配置:

  • 1 GHZ CPU
  • 384 MB 系統內存
  • 500 MB 可用硬盤(pán)空間
  • 二、創(chuàng )建內核并下載到模擬器上

    為了測試遠程調試工具,我們必須先使用PB v4.1創(chuàng )建一個(gè)內核:

    1. 使用新內核向導創(chuàng )建內核:?jiǎn)螕鬚B的"New Platform",在"step 2"的"Available BSPs"中選擇"EMULATOR:X86",接著(zhù)在"step 3"的"Available configurations"中選擇一個(gè)預定義的內核配置,這些預定義的內核配置具有針對性。在這里我們選擇"Internet Appliance"。注意:有些預定義的內核配置附帶了外殼程序,有些沒(méi)帶。選擇之后,填寫(xiě)工程名(例如Internet)和工程的保存路徑。默認"step 4"的選項,在"step 5"中去掉所有復選框。因為我們只要內核和外殼就行了。同樣去掉"step 6"中所有復選框。最后一步單擊"Done"按鈕。
    2. 編譯這個(gè)新內核:在菜單"Platform"-"Settings"-"Environment"中,單擊"New",在彈出對話(huà)框中添加變量名"IMGRAM64"和值"1"。然后單擊"Build"-"Build Platform"開(kāi)始編譯。具體編譯的時(shí)間和你的機器配置有很大關(guān)系。
    3. 配置模擬器:編譯成功后,單擊"Target"-"Configure Remote Connection",在彈出的對話(huà)框中找到"Download"下拉框,選擇"Emulator",單擊后面的"Configure",在彈出的對話(huà)框中設置分辨率為800 X 600或640 X 480。系統內存設置為64MB。單擊"OK"后,在"Kernel"下拉框中選擇"Emulator"。單擊"OK"。
    4. 啟動(dòng)模擬器:?jiǎn)螕?Target"-"Download Initialize"。等待一會(huì ),模擬器就出來(lái)了??梢钥吹綐藴释鈿さ慕缑?,也就是桌面。

    在PB中編寫(xiě)一個(gè)應用程序并下載到模擬器:

    1. 在打開(kāi)了內核工程的前提下(如果剛打開(kāi)PB,先打開(kāi)一個(gè)內核工程)。單擊PB菜單"File"-"New Project or FIle"。余下的步驟我就不用多說(shuō)了。和EVC一樣,添個(gè)工程名就可以編碼了。只是沒(méi)有MFC、ATL的支持。在這里選擇一個(gè)顯示"hello world"的SDK程序。然后單擊"Build"-"Build All"編譯程序。我一般不在PB下開(kāi)發(fā)軟件。麻煩!
    2. 在模擬器已經(jīng)打開(kāi)的前提下,單擊"Target"-"Run Programs",找到你的程序名,再單擊"Run"。在模擬器上就可以看到你的程序了。
    3. 關(guān)閉操作:先關(guān)閉模擬器。再單擊"Target"-"Disconnect"。

    三、遠程調試工具

      遠程調試工具用于在開(kāi)發(fā)平臺與實(shí)際平臺間執行一些調試工作。利用遠程調試工具可以在開(kāi)發(fā)平臺運行,得到實(shí)際平臺上的文件、監視實(shí)際平臺上進(jìn)程或線(xiàn)程的狀況、測試實(shí)際平臺上應用程序的性能等。一部分遠程調試工具是我們在開(kāi)發(fā)應用程序時(shí)常用的,還有一部分是開(kāi)發(fā)內核時(shí)常用的。對于不常用的遠程調試工具,我在這里只給予簡(jiǎn)單的介紹。

    1. 遠程調用評測程序(Remote Call Profiler)
      遠程調用評測程序包含評測和分析工具。利用圖形圖像顯示出你的代碼中算法的效率或者占用資源情況。遠程調用評測程序包含一系列接口函數。在你想要評測的代碼中調用這些接口函數,然后運行你編寫(xiě)的程序。遠程調用評測程序就能夠接收你編寫(xiě)的程序的數據并記錄。最后利用圖形顯示出來(lái)。顯然這個(gè)工具我們并不常使用。尤其是開(kāi)發(fā)非實(shí)時(shí)性?xún)群撕蛙浖?,加上目前?a class="contentlabel" href="http://dyxdggzs.com/news/listbylabel/label/嵌入式">嵌入式微處理器處理速度已經(jīng)很快了,對于一個(gè)軟件性能的評測的需求就淡化了。當然,你要是愿意,覺(jué)得有必要也可以研究一下它的接口函數,然后測一下。我目前可沒(méi)這個(gè)時(shí)間。微軟提供了例子程序"hello"。如果你把Windows CE安裝在C盤(pán),那么路徑為:
      "C:Program FilesCommon FilesMicrosoft SharedWindows CE ToolsPlatmansdkwce410sampleshello"。
      我編譯了此程序并測試了一下。遠程調用評測程序顯示的圖形如圖2所示。


      圖二 評測圖像截圖
       
    2. 遠程文件瀏覽程序(Remote File Viewer)
      遠程文件瀏覽程序是最常用、最易操作的工具之一。它的作用就是向實(shí)際平臺導入或導出文件。假如我在調試一個(gè)顯示位圖的程序。位圖允許用戶(hù)自行選擇。那么要在模擬器下調試,就必須將位圖文件先導入到模擬器中。
      模擬器打開(kāi)后,運行遠程文件瀏覽程序,先彈出一個(gè)對話(huà)框,要你選擇訪(fǎng)問(wèn)哪個(gè)平臺。如圖3所示。


      圖三 平臺選擇對話(huà)框

      選擇"Default Device"后。主窗口就顯示出來(lái)了。如圖4所示。左邊目錄數列出的是模擬器運行的內核的所有目錄。右邊是指定目錄下的文件。工具欄最右邊是導入和導出按鈕。這里的導入和導出是相對開(kāi)發(fā)平臺而言的。接上個(gè)例子所說(shuō),要將一個(gè)位圖文件傳到模擬器中。先單擊導出按鈕(上箭頭),在彈出的對話(huà)框中選擇一個(gè)位圖文件,確定后,這個(gè)文件就出現在遠程文件瀏覽程序的右邊文件窗口中了。導入也簡(jiǎn)單,先選擇一個(gè)文件,再單擊導入按鈕,再選擇路徑,保存即可。


      圖四 遠程文件瀏覽程序截圖

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

      顯然“Walker”不能翻譯成“查看”。你愿意怎么翻譯就怎么翻譯吧。在這里我就叫查看了,這樣容易理解。從名字就可以看出它是用來(lái)查看操作系統中每個(gè)進(jìn)程使用的堆的情況。什么是堆就不用我說(shuō)了吧!堆大家都了解,但是CE下關(guān)于堆的知識也值得一說(shuō)。以后我會(huì )有專(zhuān)門(mén)講述CE下進(jìn)程、線(xiàn)程、和內存管理方面的文章發(fā)表,那時(shí)會(huì )說(shuō)的非常詳細。利用“遠程堆查看程序”能夠查看到:

  • 內核中正運行的進(jìn)程的名字、ID、及使用的所有的堆的ID。如圖1所示
  • 進(jìn)程的一個(gè)堆中的首地址、結束地址、及標志(Fixed、Free)
  • 堆中每塊(Block)的實(shí)際內容

  • 圖 1 進(jìn)程列表

      查看和使用這個(gè)工具是很簡(jiǎn)單的事情。不過(guò)前提是你對堆有所了解。下面我說(shuō)說(shuō)和這個(gè)工具有關(guān)的涉及到堆的知識。CE下每個(gè)進(jìn)程啟動(dòng)時(shí),系統會(huì )自動(dòng)分配192KB的局部堆給這個(gè)進(jìn)程。要是不夠你就通過(guò)調用堆管理函數自己再分配自定義大小的堆。自己分配的堆,包括系統給你分配的堆,都由ID來(lái)標識。如圖中所示的Heap ID。進(jìn)程ID和進(jìn)程名就不用說(shuō)了。后面的“Flag”只有一個(gè)值“HF32_DEFAULT”,表示系統默認分配的堆。 圖中的“device.exe”,有四個(gè)都一樣。但從進(jìn)程ID就可以看出這是一個(gè)進(jìn)程,而不是一個(gè)應用程序的四個(gè)實(shí)例。因為列表是以堆為單位,“device.exe”分配了四個(gè)堆,就顯示了四個(gè)。
      雙擊列表中任何一項,彈出這個(gè)堆的包含的塊的列表。列出塊的首地址、大小、標志。我們分配了一個(gè)堆,就可以在堆中分配數組、結構等。這個(gè)塊就指每個(gè)分配的元素。標志中“Fixed”表示不能釋放這個(gè)塊占據的內存空間。而“Free”則相反,表示能夠釋放這個(gè)塊占據的內存空間??吹竭@,也許你會(huì )有疑問(wèn),標志給誰(shuí)看的?由誰(shuí)釋放???這涉及到內存的管理,內核的OOM組件。在以后的文章中我會(huì )做詳細的解釋。
      再單擊每個(gè)塊,在彈出的列表中就可以看到這個(gè)塊的具體數據了(用ASCII表示)。

    4、遠程內核跟蹤程序(Remote Kernel Tracker)

      遠程內核跟蹤程序用于跟蹤實(shí)際平臺內核的執行情況,一般使用它跟蹤內核的啟動(dòng)情況,搜集相關(guān)數據并在開(kāi)發(fā)平臺上以圖表形式顯示出來(lái)。如圖2所示。這個(gè)程序能夠跟蹤所有的進(jìn)程和進(jìn)程中的所有線(xiàn)程。從開(kāi)始運行起跟蹤,跟蹤結束的時(shí)間由數據接收緩沖區的大小決定。緩沖區的大小從1MB到100MB,由用戶(hù)自己設定。跟蹤內容為進(jìn)程的運行、不運行,線(xiàn)程的運行、阻塞、睡眠。還有在線(xiàn)程中所有發(fā)生的同步事件。在此程序的右邊有所有能夠跟蹤的事件對應的圖標。
      要跟蹤一個(gè)內核的啟動(dòng)情況(啟動(dòng)后也能使用這個(gè)程序跟蹤所有進(jìn)程、線(xiàn)程),先要使你要跟蹤的內核具有幾個(gè)特性。在PB菜單“Platform”-“Settings”-“Build Options”中復選“Enable Event Tracking During Boot”和“Enable Profiling”。然后重新編譯整個(gè)內核。(注意PB在編譯時(shí)可能提示產(chǎn)生錯誤,如果出現這種情況,那就重建內核)
      編譯成功后,先打開(kāi)遠程內核跟蹤程序,在彈出的平臺選擇對話(huà)框中(上篇文章中包含此圖)按“OK”,這時(shí)立刻單擊PB的“Download/Initialize”調出模擬器。等待一會(huì )遠程內核跟蹤程序就將整個(gè)啟動(dòng)過(guò)程中發(fā)生的所有情況記錄并顯示出來(lái)。哪個(gè)時(shí)間段線(xiàn)程運行或睡眠或阻塞,包括發(fā)生了哪個(gè)中斷都記錄下來(lái)。缺點(diǎn)就是數據量太大。這個(gè)程序提供了查找功能和過(guò)濾功能。查找功能可以查找你想要找的事件,而過(guò)濾功能可以讓此程序只記錄你想要的事件。最后還可以保存這些記錄數據。保存到擴展名為“.clg”的文件中。
      這個(gè)工具我只能講這么多了,平時(shí)很少用到。


    圖 2 跟蹤情況截圖

    5、遠程性能監視程序(Remote Performance Monitor)

      這個(gè)程序的界面大家一定很熟悉了。和其它Windows操作系統中附帶的性能監視器界面非常相似。如圖3所示。操作也幾乎一樣。


    圖3 性能監視程序截圖

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

    6、遠程進(jìn)程瀏覽程序(Remote Process Viewer)

      此程序共三個(gè)窗口,分別顯示當前內核中所有進(jìn)程、進(jìn)程中的線(xiàn)程、及進(jìn)程中所有加載的DLL。在顯示進(jìn)程的窗口中,分別顯示進(jìn)程名、進(jìn)程ID、基本優(yōu)先級級別、擁有的線(xiàn)程總數、基地址、訪(fǎng)問(wèn)鍵值、主窗口名。在顯示線(xiàn)程的窗口中,分別顯示線(xiàn)程ID、當前進(jìn)程ID、線(xiàn)程優(yōu)先級、訪(fǎng)問(wèn)鍵。在顯示DLL模塊的窗口中,分別顯示模塊名、模塊ID、當前進(jìn)程使用計數、全局使用計數、基地址、大小、模塊句柄、路徑。這里要說(shuō)明的是線(xiàn)程窗口中的“當前進(jìn)程ID”。當前進(jìn)程ID會(huì )有不相同的時(shí)候,奇怪!線(xiàn)程窗口應該顯示當前指定進(jìn)程下的所有線(xiàn)程,怎么會(huì )有不同的進(jìn)程ID呢?因為CE幫助中什么都沒(méi)說(shuō),所以請允許我設想一下:比如“explorer.exe”,它包含的線(xiàn)程其中就有兩個(gè)在“當前進(jìn)程ID”中顯示為進(jìn)程“gwes.exe”,“gwes.exe”為圖形、窗口、事件子系統。它負責圖形和窗口以及窗口消息?!癳xplorer.exe”的線(xiàn)程在顯示窗口、收發(fā)消息時(shí)調用“Coredll.dll”(以后會(huì )具體講解此DLL),這個(gè)DLL調用圖形、窗口、事件模塊。這些模塊實(shí)際上是驅動(dòng)程序(DLL),由gwes.exe來(lái)加載、管理這些DLL。所以顯示當前進(jìn)程為“gwes.exe”。目前只能這么解釋了。


    圖4 進(jìn)程瀏覽程序截圖

    7、遠程注冊表編輯程序(Remote Registry Editor)

    此程序和其它Windows 操作系統下的注冊表編輯器非常相似。但它能夠顯示、編譯開(kāi)發(fā)平臺下的注冊表和實(shí)際平臺下的注冊表。如圖5所示。具體操作我就不多說(shuō)了。CE下注冊表的限制我也曾說(shuō)過(guò)了。


    圖5 注冊表編輯器截圖

    8、遠程消息監視程序(Remote Spy)

      這個(gè)程序和VC下附帶的工具spy非常相似。能夠列出所有實(shí)際平臺下的窗口和窗口消息。我想這個(gè)程序也不用我多說(shuō)了吧。熟悉VC下的工具,就能操作這個(gè)工具。界面如圖6所示。


    圖6 消息監視界面截圖

    9、遠程系統信息(Remote System Information)

    這個(gè)工具能夠查看實(shí)際平臺的系統信息,包括硬件和軟件的信息。


    圖7 系統信息截圖

    10、遠程屏幕截圖程序(Remote Zoom-in)

      此工具能夠截取實(shí)際平臺屏幕圖像。這個(gè)工具最適合寫(xiě)說(shuō)明書(shū)了。假如一個(gè)產(chǎn)品要推向市場(chǎng),那說(shuō)明書(shū)或演示程序必須準備好。用這個(gè)程序截圖放到說(shuō)明書(shū)或演示程序中。截圖單擊“File”-“New Bitmap”。這個(gè)程序的界面我就不給出了。

    總結

      10個(gè)遠程工具為我們開(kāi)發(fā)內核和應用程序提供了很大的幫助。顯然有些工具很少用,有些工具常用。對于注冊表編輯器,在一些網(wǎng)站有源碼和程序可下載。把注冊表編輯器帶到內核中運行會(huì )更有效,更節省時(shí)間。這10個(gè)工具中,最帥的就是內核跟蹤程序了,通過(guò)內核跟蹤程序,整個(gè)內核啟動(dòng)過(guò)程清晰可見(jiàn)。還可以用它監視你的應用程序。有一點(diǎn)還要說(shuō)明:這10個(gè)遠程調試工具我是在模擬器上試驗的。如果要調試實(shí)際平臺,必須先通過(guò)串口、網(wǎng)卡把開(kāi)發(fā)平臺和實(shí)際平臺連接起來(lái)。在“Target”-“Configure Remote Connection”中設置。實(shí)際設備最好有網(wǎng)卡,串口的速度太慢了。這方面請參考幫助文件,幫助文件中說(shuō)的非常詳細了。

    linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


    評論


    相關(guān)推薦

    技術(shù)專(zhuān)區

    關(guān)閉
    国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
    <dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>