mtk除錯的奇淫技巧(2012-4-12 18:02)
不言而喻,無論是開發還是技術支援,與bug打交道在所難免。如果掌握了一些好的方法的話,可以起到事半功倍的效果。
大致說來,mtk平台,無非是以下幾種方式加trace資訊:
一、向串列埠輸出。優點,方便,快捷,缺點是列印太快,有些重要資訊不易獲取,不能過濾,要搜尋半天,rder們樂此不彼。比較適合除錯驅動程式。
二、使用catcher工具。缺點,使用起來優點複雜。優點是能獲取足夠多的trace資訊,可以過濾掉不關注的模組,供快速分析定位問題。比較適合開發一般mmi應用。
三、寫檔案。兼備上述第一點盒第二點的優點,缺點是需要再使用ultra edit等其他第三方工具進行分析。此種方法適合開發利用socket進行聯網的程式。
mtk平台是基於arm平台,大家一般都會遇到data abort的問題,一般是記憶體訪問異常,如陣列越界,記憶體越界(指標),分析定位這類問題,一般都是與記憶體操作相關的函式引起的,如strcpy,memcpy,kal_wstrcpy等等。一般是根據程式的執行流程,加一些函式打點軌跡的trace,如「enter [entryidlescreen],6651」(6651是行號)。一般能分析到程式是掛在哪個函式裡面。
倘若不能定位是掛在哪個函式,有點小技巧就是,在可疑的函式裡加一些kal_sleep_task,讓mmi sleep一下,以便將盡可能多的資訊列印出來。
倘若此法失效。那只有根據程式掛了之後的堆疊,進行分析了。這種方法已經有人介紹,在此不贅述了。值得注意的是,lr暫存器的內容,值得關注,這是函式的返回位址,根據這個位址,一般能查到呼叫函式的位址。
對於prefetch abort和undefined instruction,一般是記憶體被踩了導致的。需要花相當大的時間與精力分析了。只有多加trace,此外,貌似沒有更好的方法。
另外,arm一般沒有除法指令,以及對於float的支援,尤其是不給力。所以在mtk裡,盡量不要使用浮點數,一是執行起來頗慢,更要命的是,很容易出現prefetch abort,undefined instruction,data abort。尤其是將浮點數,格式輸出到緩衝區裡的時候,切忌使用kal_wsprintf,必須使用kal_printf,否則後果不堪設想。
下面是mtk工程裡的乙個實現函式,頗為有用:
dev_extern dev_void devlib_ftoa(dev_int8* pbuffer, dev_real64 fvalue, dev_int ndecimal)
另外,建議開發者多參考mtk工程裡,別人寫的成熟**,「拿來主義」,不能一知半解(mtk的api文件一般不全,**函式的注釋也不能望文生義)。
希望大家開發快樂,快樂開發!
這是我的一點小小心得,與諸位分享。有不妥之處,請大家不吝指出,以期共同進步!
python奇淫技巧
01 異常處理 02 python 中re模組的re.compile 方法 03 python中with的用法 04 pycharm使用git github的pull request流程 05 python的qrcode庫生成 圓角logo myqr庫生成動態 06 python包管理工具pipen...
奇淫技巧 長期更新
老版本的iis環境 index.asp data 可爆原始碼 phpstudy後門直接寫馬 space set o history 針對你的工作關閉歷史記錄,並且由於空格的緣故,該命令本身也不會被記錄 history grep keyword history d num 刪除指定歷史命令 num代表...
位運算的奇淫技巧
1.組資料中只有乙個數字出現了一次。其他所有數字都是成對出現的。請找出這個數字。a b b a 因為只有乙個數恰好出現乙個,剩下的都出現過兩次,所以只要將所有的數異或起來,就可以得到唯一的那個數。include int find char str,int sz return tmp int main...