mtk 模擬器編譯與調試

來源:互聯網
上載者:User

前篇文章介紹了手機調試的TRACE技巧,MTK手機調試是比較簡單的,除了打
TRACE,找ASSERT,分析DUMP外,剩下的就是經驗了,有經驗的人看到現象就能猜到問題出在什麼地方,簡單看一下TRACE只是為了確認自己的
猜測.初涉此道的朋友往往需要時間,慢慢積累經驗.要達到熟練,就需要有空的時候多讀多研究代碼.熟練的掌握了代碼,解決問題就會熟能生巧.

MTK的模擬器調試說沒技巧也是對的,說有技巧也不錯.因為模擬器的技術與其說是MTK經驗,不如說是VC經驗.

由於模擬器能在沒有樣機的情況做大量的UI方面的開發,同時模擬器具有快捷,所見即所改等優點,因此,受到很多開發老手的青睞.熟練掌握模擬器使用
技巧,對於提高工作效率,節省資源具有很積極的意義.

工欲善其事,必先利其器.欲瞭解模擬器調試,就要先瞭解VC使用.VC調試過程中經常使用的快速鍵如下:

vc++斷點的使用:按F9(設定斷點),F5調試,F10單步調試,shift+F5退出調試F10單語句執行,F11單指令執
行,Ctrl+F10執行至游標處;F9按行設定/取消斷點,
Alt+F9可按行,按資料或按訊息設定斷點;調試時,按Alt+3開啟跟蹤視窗,Alt+4開啟變數視窗,Alt+5開啟寄存器視窗,Alt+6開啟內
存視窗,Alt+7開啟堆棧視窗,Alt+8開啟彙編指令視窗;

1.只要你有原始碼,擁有一個模擬器是一件很容易的事.當然,有些情況下,這對於初入MTK的人來說,也是困難的,特別是在一些代碼管理不善,公司
人員眾多,員工流動頻繁的公司,你永遠想象不出他們的代碼會有多糟.不過一般情況下,我到一個新公司,都會試著去使用他們的代碼編譯得到模擬器,不管他們
的代碼多麼糟,我總能快速的編出模擬器來.只要三個步驟:
a.在編譯模擬器前請關掉所有SP的宏,這是很重要的,很多SP都不提供在模擬器下啟動並執行庫,所以一個項目SP越多,在模擬器下,他無法識別的函數也會越

b.在編譯過程中遇到錯誤,可以把所有與顯示無關的代碼全部使用#ifdef WIN32宏括起來,把所有不認識的類型使用typedef int
xxx;重定義.把一些不能識別的宏定義使用WIN32括起來重定義一下
c.在產生MODIS時,會遇到大量不認識的函數,如果少於50個,全部建成void
xxx(){}類型的空函數.如果多於一百個,嘗試尋找這些函數的來源,如果是相關SP的,就再次補充關掉相關SP.當然如果你不怕麻煩,也可以把這一百
個函數建成空函數.一般來說,把所有第三方功能和與MTK無關的功能關掉的話,不能識別的函數一般不會超過十個.
經過這樣三步,一般情況下你都能得一個差不多可以使用的模擬器.有了模擬器,你就可以進行下面的工作了.如果你仍然無法獲得模擬器,建議諮詢你的項目領
導,如果你的領導也無法解決,說明這個軟體組是一個組員變動很快,或者說缺乏條理性的部門,當然也有可能這個部門的程式員都是一些MTK的頂尖層高手,他
們的程式從來不需要調試.總之這是會讓人瘋狂的部門.

2.如果你順利到到一個模擬器,那麼就可以開始調試了.首先說一下斷點,VC中的斷點分三大類,一類是本地斷點,一類是資料斷點(也稱之為條件斷
點,有人稱之為進階斷點),還是一類是訊息斷點;這三類斷點分別對應於快速鍵"ALT+F9"開啟的對話方塊中三個選項卡.由於訊息斷點是用於跟蹤WIN的
訊息,所以在MTK中用不著.在模擬器中一般我們只使用本地斷點與資料斷點.本地斷點和資料斷點在BUG調試中舉足輕重,熠熠生輝。熟練掌握斷點技巧,可
以使工作事倍功半。可能有些人會使用斷點,但卻不知道斷點在模擬器中有什麼妙用.斷點有兩個最常使用也的作用,一是跟蹤代碼執行情況,二是觀察斷點處局部
變數值的變化.這兩個功能應用最多.但他在MTK模擬器中還有兩個隱含的用途,一就是快速定位檔案,MTK本身的原始碼大約有差不多上萬個檔案,而加入
SP後,代碼大約已經超過了萬數.在這裡面尋找文章,尋找函數,是一件很困難的事,這時就需要使用斷點了.你在代碼閱讀工具SI中可以很輕鬆的利
用"CTRL+O"開啟檔案,也可以使用"F7"快速定位到函數,但在VC中卻沒這麼方便,不過你可以使用斷點,比如想在VC中開啟某個檔案
wgui_categories_CM.c,只要VC中使用"ALT+F9",在break
at編輯框裡輸入{,E:/JMT_1120/plutommi/mmi/GUI/GUI_SRC/wgui_categories_CM.c,}
.4693,按F5執行DEBUG後VC就能自己定位到這個檔案wgui_categories_CM.c的4693行。這是檔案斷點,也可以打函數斷
點,比如檔案wgui_categories_CM.c的4693行對應的是函數ShowCategory16Screen,也可以直接在break
at編輯框裡輸入ShowCategory16Screen,使用F5鍵DEBUG時,函數運行到撥號介面時,就會停下來供你調試。本地斷點就是這樣使用
的。那麼本地斷點有什麼用呢?或者說有什麼特殊用途呢?簡單舉幾個例子吧,但斷點可以應用於解決十分多的問題中,不要因為我的例子束縛了你的想象力.
a.如何使用斷點快速定位到問題點呢?如果我們發現,撥號視窗顯示出了問題,但我們對代碼不熟,不知道撥號視窗的代碼在哪個檔案,哪一行,我們就可以在
EntryNewScreen函數上打斷點,當進入撥號時他就會停下來,這時我們能過堆棧視窗資訊就可以很輕鬆的找到這個視窗的實現函數。詳細研究代碼,
就可以找到解決方案.
b.斷點可以用於快速解決視窗顯示問題,比如我們的撥號視窗,有一個圖片顯示不正常,這時我們可以在繪圖函數gdi_image_codec_draw上
打上斷點,進入撥號視窗中,每一次顯示圖片,都會在該函數上停下來,結合堆棧,我們可以很容易找到是哪個地方代碼出來問題,從而找到解決方案.有關此類的
函數太多,不一一舉例.
C.斷點可以用來研究全域變數被意外修改問題,我們開啟斷點對話方塊,選第二個選項卡,把需要跟蹤的變數打進去,當每次變數變化時,VC都會停下來等我們調
試.也可以設定條件,假設某全域變數U8 g_XXX,
其值等於5時會出錯,但你不知道這個全域變數在什麼地方被什麼代碼賦值為5,這時就可以設定資料斷點,在第二選項卡上面的對話方塊裡輸入g_XXX ==
5,當其值為5時就會停下來.
d.研究代碼也可以使用斷點,比如MTK代碼裡使用有很多函數指標封裝,例如gui_print_text指標,你想研究他的實現過程,但由於是指標,你
找不到他的函數體,這時你就可以在資料斷點中,把指標gui_print_text輸入進去,重啟模擬器時,他就會定位到ui_print_text函數
處.
茲舉這四個例子吧,斷點可以使用於你需要調試的任何場合,但過多的斷點會影響你尋找問題的速度,等熟練使用時,就可以有針對性的對某些變數和函數打斷點以
解決問題.這是一個積累的過程
3.堆棧調試,Alt+7開啟堆棧視窗.該視窗中我們可以看到函數之間的調用關係,這是十分有用的,一般都是結合斷點使用,定位BUG和研究代碼十分有
用.由於上面有例子,這裡就不舉了
4.變數視窗,Alt+4開啟變數視窗,該視窗會自動顯示斷點代碼處使用的變數及其值,閱讀代碼解決BUG時使用,逐步執行時經常參考該視窗資料
5.WATCH視窗,按Alt+3開啟,由於變數視窗自動顯示的變數有時不是我們需要的,這時就可以把我們需要查看的變數拖放到該視窗研究,結合斷點使
用,並且這裡也支援運算式取值,真是太棒了.
6.記憶體視窗,Alt+6開啟記憶體視窗,記憶體視窗可以顯示一塊記憶體的內容,這是很有用的,比如我們要跟蹤簡訊內容,有一個簡訊內容的指標,把該指標輸入
WATCH視窗,只能看到該指標指向的第一個值,要看其他的,會很麻煩,你只能輸入運算式,但你把該指標輸入記憶體視窗,就不必這樣費事了
7.Alt+8開啟彙編指令視窗,這個視窗用處不是很大,學習彙編的話,還是有用處的.一般情況下,如果第三方的庫檔案出了問題,也就只能使用這個視窗調
試了.普通情況下,如果錯誤定位在C標準庫檔案的彙編代碼上,只有一種可能,就是你的調用出錯了.

 

 

調試佔了研發的很大一部分時間,調試的基本技術就這樣,一般情況下是綜合運用,靈活掌握,以期快速解決問題,穩定代碼.剩下就是經驗積累的問題了.

 

註:

MTK Modis 使用簡介
Modis PC模擬, 要進行如下操作:(假設工程路徑為D:/X)
第一步:在如下目錄中D:/X
執行 make Prj_Name GPRS gen_modis

第二步: 轉到modis目錄 D:/X/modis執行 createmodis.pl
../make/Prj_Name_GPRS.mak

第三步:再切換到 D:/X
執行 make Prj_Name GPRS codegen_modis

第四步:最後轉到modis目錄,
執行 modiscodegen.pl ../make/Prj_Name_GPRS.mak

第五步:開始使用Modis模擬--運行D:/X/modis/Modis.dsw,編譯工程;
第六步:啟動Modis->開機->Option->Luanch
Catcher&NS,這樣就可以進行類比操作並從catcher中得到日誌;
注意:老版本的Catcher下出現NS不能控制的情況。

make WMD6225_GEMINI GPRS gen_modis
cd modis
createmodis.pl ../make/WMD6225_GEMINI_GPRS.mak
cd ..
make WMD6225_GEMINI GPRS codegen_modis
cd modis
modiscodegen.pl ../make/WMD6225_GEMINI_GPRS.mak

轉自 :http://www.52rd.com/Blog/Detail_RD.Blog_blogercn_22088.html

聯繫我們

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