下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、前篇文章介紹了手機調(diào)試的TRACE技巧,MTK手機調(diào)試是比較簡單的,除了打TRACE,找ASSERT,分析DUMP外,剩下的就是經(jīng)驗了,有經(jīng)驗的人看到現(xiàn)象就能猜到問題出在什么地方,簡單看一下TRACE只是為了確認(rèn)自己的猜測.初涉此道的朋友往往需要時間,慢慢積累經(jīng)驗.要達(dá)到熟練,就需要有空的時候多讀多研究代碼.熟練的掌握了代碼,解決問題就會熟能生巧. MTK的模擬器調(diào)試說沒技巧也是對的,說有技巧也不錯.因為模擬器的技術(shù)與其說是MTK經(jīng)驗,不如說是VC經(jīng)驗. 由于模擬器能在沒有樣機的情況做大量的UI方面的開發(fā),同時模擬器具有快捷,所見即所改等優(yōu)點,因此,受到很多開發(fā)老手的青睞.熟練掌握模擬器使用技
2、巧,對于提高工作效率,節(jié)省資源具有很積極的意義. 工欲善其事,必先利其器.欲了解模擬器調(diào)試,就要先了解VC使用.VC調(diào)試過程中經(jīng)常使用的快捷鍵如下: vc+斷點的使用:按F9(設(shè)置斷點),F(xiàn)5調(diào)試,F(xiàn)10單步調(diào)試,shift+F5退出調(diào)試F10單語句執(zhí)行,F(xiàn)11單指令執(zhí)行,Ctrl+F10執(zhí)行至光標(biāo)處;F9按行設(shè)置/取消斷點, Alt+F9可按行,按數(shù)據(jù)或按消息設(shè)置斷點;調(diào)試時,按Alt+3打開跟蹤窗口,Alt+4打開變量窗口,Alt+5打開寄存器窗口,Alt+6打開內(nèi)存窗口,Alt+7打開堆棧窗口,Alt+8打開匯編指令窗口; 1.只要你有源代碼,擁有一個模擬器是一件很容易的事.當(dāng)然,有些情
3、況下,這對于初入MTK的人來說,也是困難的,特別是在一些代碼管理不善,公司人員眾多,員工流動頻繁的公司,你永遠(yuǎn)想象不出他們的代碼會有多糟.不過一般情況下,我到一個新公司,都會試著去使用他們的代碼編譯得到模擬器,不管他們的代碼多么糟,我總能快速的編出模擬器來.只要三個步驟: a.在編譯模擬器前請關(guān)掉所有SP的宏,這是很重要的,很多SP都不提供在模擬器下運行的庫,所以一個項目SP越多,在模擬器下,他無法識別的函數(shù)也會越多 b.在編譯過程中遇到錯誤,可以把所有與顯示無關(guān)的代碼全部使用#ifdef WIN32宏括起來,把所有不認(rèn)識的類型使用typedef int xxx;重定義.把一些不能識別的宏定義
4、使用WIN32括起來重定義一下 c.在生成MODIS時,會遇到大量不認(rèn)識的函數(shù),如果少于50個,全部建成void xxx(類型的空函數(shù).如果多于一百個,嘗試查找這些函數(shù)的來源,如果是相關(guān)SP的,就再次補充關(guān)掉相關(guān)SP.當(dāng)然如果你不怕麻煩,也可以把這一百個函數(shù)建成空函數(shù).一般來說,把所有第三方功能和與MTK無關(guān)的功能關(guān)掉的話,不能識別的函數(shù)一般不會超過十個. 經(jīng)過這樣三步,一般情況下你都能得一個差不多可以使用的模擬器.有了模擬器,你就可以進(jìn)行下面的工作了.如果你仍然無法獲得模擬器,建議咨詢你的項目領(lǐng)導(dǎo),如果你的領(lǐng)導(dǎo)也無法解決,說明這個軟件組是 個地方代碼出來問題,從而找到解決方法.有關(guān)此類的函數(shù)
5、太多,不一一舉例. C.斷點可以用來研究全局變量被意外修改問題,我們打開斷點對話框,選第二個選項卡,把需要跟蹤的變量打進(jìn)去,當(dāng)每次變量變化時,VC都會停下來等我們調(diào)試.也可以設(shè)置條件,假設(shè)某全局變量U8 g_XXX, 其值等于5時會出錯,但你不知道這個全局變量在什么地方被什么代碼賦值為5,這時就可以設(shè)置數(shù)據(jù)斷點,在第二選項卡上面的對話框里輸入g_XXX = 5,當(dāng)其值為5時就會停下來. d.研究代碼也可以使用斷點,比如MTK代碼里使用有很多函數(shù)指針封裝,例如gui_print_text指針,你想研究他的實現(xiàn)過程,但由于是指針,你找不到他的函數(shù)體,這時你就可以在數(shù)據(jù)斷點中,把指針gui_prin
6、t_text輸入進(jìn)去,重啟模擬器時,他就會定位到ui_print_text函數(shù)處. 茲舉這四個例子吧,斷點可以使用于你需要調(diào)試的任何場合,但過多的斷點會影響你查找問題的速度,等熟練使用時,就可以有針對性的對某些變量和函數(shù)打斷點以解決問題.這是一個積累的過程 3.堆棧調(diào)試,Alt+7打開堆棧窗口.該窗口中我們可以看到函數(shù)之間的調(diào)用關(guān)系,這是十分有用的,一般都是結(jié)合斷點使用,定位BUG和研究代碼十分有用.由于上面有例子,這里就不舉了 4.變量窗口,Alt+4打開變量窗口,該窗口會自動顯示斷點代碼處使用的變量及其值,閱讀代碼解決BUG時使用,單步執(zhí)行時經(jīng)常參考該窗口數(shù)據(jù) 5.WATCH窗口,按Alt
7、+3打開,由于變量窗口自動顯示的變量有時不是我們需要的,這時就可以把我們需要查看的變量拖放到該窗口研究,結(jié)合斷點使用,并且這里也支持表達(dá)式取值,真是太棒了. 6.內(nèi)存窗口,Alt+6打開內(nèi)存窗口,內(nèi)存窗口可以顯示一塊內(nèi)存的內(nèi)容,這是很有用的,比如我們要跟蹤短信內(nèi)容,有一個短信內(nèi)容的指針,把該指針輸入WATCH窗口,只能看到該指針指向的第一個值,要看其他的,會很麻煩,你只能輸入表達(dá)式,但你把該指針輸入內(nèi)存窗口,就不必這樣費事了 7.Alt+8打開匯編指令窗口,這個窗口用處不是很大,學(xué)習(xí)匯編的話,還是有用處的.一般情況下,如果第三方的庫文件出了問題,也就只能使用這個窗口調(diào)試了.普通情況下,如果錯誤
8、定位在C標(biāo)準(zhǔn)庫文件的匯編代碼上,只有一種可能,就是你的調(diào)用出錯了. 調(diào)試占了研發(fā)的很大一部分時間,調(diào)試的基本技術(shù)就這樣,一般情況下是綜合運用,靈活掌握,以期快速解決問題,穩(wěn)定代碼.剩下就是經(jīng)驗積累的問題了. 注: MTK Modis 使用簡介 Modis PC仿真, 要進(jìn)行如下操作:(假設(shè)工程路徑為D:X 第一步:在如下目錄中D:X 執(zhí)行 make Prj_Name GPRS gen_modis 第二步: 轉(zhuǎn)到modis目錄 D:Xmodis執(zhí)行 createmodis.pl .makePrj_Name_GPRS.mak 第三步:再切換到 D:X 執(zhí)行 ma 到該軟件版本對應(yīng) 的sym文件。該
9、sym和BIN文件同步生成,都位于BUILD文件下。該文件儲存了ARM編繹器為軟件中所有函數(shù)生成的地址。 而出錯時,MTK會保存當(dāng)時棧中最近執(zhí)行的10條指令的地址,我們通過對這些地址的研究,就可以找到出錯的地方。 由于sym文件只保存了函數(shù)的地址,函數(shù)體里執(zhí)行的代碼地址沒有列出,而一般打出的錯誤地址不會正好對應(yīng)某個函數(shù)的 地址,一般會會偏移N個單位。當(dāng)然也有例外,我曾遇到一次出錯,有一個地址正好和某函數(shù)地址對應(yīng)。對于出錯信息 的地址與函數(shù)地址不對應(yīng)的情況,我推測應(yīng)該是函數(shù)體里的指令出錯,所以應(yīng)查找比該出錯指令小且最近的函數(shù)。 比如上例行“Trace 1745424 150706 MOD_NIL
10、 TRACE_ERROR 0x085569C9”,我們在sym文件中不應(yīng)該查找0x085569C9 對應(yīng)的指令,因為一般會一個也找不到,我們要查找x085569C或者x085569對就的函數(shù),這時大約可以查到許多函數(shù), 找到與該出錯地址最近且比該地址小的地址對應(yīng)的函數(shù),十個地址大約可以找到十個左右的函數(shù),通過仔細(xì)排查, 確認(rèn)以下函數(shù): med_int_left_size med_int_sfreeaud_main aud_tts_play_req_hdlr med_int_smalloc med_set_ext_memory_pool TCC_Task_Shell 如此可以大致確定問題出處和原
11、因了,請教項目負(fù)責(zé)人,知道aud_tts_play_req_hdlr 是語音王的播放函數(shù),在呼入時,有來電報號,該功能和QQ都是從MED棧上動態(tài)分配內(nèi)存,由于QQ占用了一部內(nèi)存,有呼入電話時,語音王分配內(nèi)存失敗,導(dǎo)到語音解碼故障。問題一下解決。 = 呵呵,通過map信息,來查找導(dǎo)致問題的函數(shù)入口,是最常用的調(diào)試手段之一。其實, 也完全可以通過現(xiàn)象分析來查找問題點。比如,這種完全能復(fù)現(xiàn)的問題,很容易找到固定路徑的。 如來電提示改為震動,或者無聲,會怎樣,關(guān)閉來電報號,會怎樣。一下問題點就出來了。共享內(nèi)存導(dǎo)致的這個問題, 其實是設(shè)計時候的欠考慮,沒有考慮到各種可能常見的邊界。 Assert用得太多
12、也未必好,作為一種調(diào)試手段, 如果都出廠了,還到處Assert或重啟來處理一些問題,顯得太那個了吧,太不健壯了。 MTK串口調(diào)試設(shè)置 MTK產(chǎn)品發(fā)布時AT和Debug復(fù)用僅有的一個串口。 一般AT指令和下載代碼一般用串口(APP uses uart_port1, debug調(diào)試一般用串口(TST uses uart_port2)。 代碼中有可能把串口2和串口3設(shè)置為普通IO口來用,因此,在程序調(diào)試階段,如果要想把AT調(diào)試和Debug調(diào)試同時打開,則需要從新設(shè)置uart_port2的GPIO設(shè)置。 設(shè)置方法:進(jìn)入customdrvDrv_Tool,用DrvGen.exe 打開customdrvmisc_drv"項目名"cod egen.dws,對uart端口對應(yīng)的GPIO進(jìn)行相應(yīng)設(shè)置即可。 如果只是想掉換TST和AT調(diào)試信息的串口,只需設(shè)置: ./custom/common/PLUTO_MMI/nvram_common_config.c中NVRAM_EF_PORT_SETTIN
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度網(wǎng)絡(luò)安全風(fēng)險評估與解決方案合同范本3篇
- 二零二五版股權(quán)激勵合同:某上市公司對高級管理人員股權(quán)激勵計劃3篇
- 2025年度時尚服飾店開業(yè)活動承包合同3篇
- 2025年度高端不銹鋼醫(yī)療器械制造委托合同3篇
- 二零二五版智能穿戴設(shè)備代加工合同范本2篇
- 二零二五年度環(huán)保型車間生產(chǎn)承包服務(wù)合同范本3篇
- 二零二五年高管子女教育援助與扶持合同3篇
- 2025年草場租賃與牧區(qū)基礎(chǔ)設(shè)施建設(shè)合同3篇
- 二零二五版涵洞工程勞務(wù)分包單價及工期延誤賠償合同3篇
- 二零二五版財務(wù)報表編制會計勞動合同范本3篇
- GB/T 34241-2017卷式聚酰胺復(fù)合反滲透膜元件
- GB/T 12494-1990食品機械專用白油
- 運輸供應(yīng)商年度評價表
- 成熙高級英語聽力腳本
- 北京語言大學(xué)保衛(wèi)處管理崗位工作人員招考聘用【共500題附答案解析】模擬試卷
- 肺癌的診治指南課件
- 人教版七年級下冊數(shù)學(xué)全冊完整版課件
- 商場裝修改造施工組織設(shè)計
- 統(tǒng)編版一年級語文上冊 第5單元教材解讀 PPT
- 加減乘除混合運算600題直接打印
- ASCO7000系列GROUP5控制盤使用手冊
評論
0/150
提交評論