解bug三步:
1)看log,看現象。
2)對比代碼分析過程,程序流程,線程、中斷、workqueue等各個獨立執(zhí)行體的交互
3)調試,加入log、驗證。 光看代碼只能停留在理論上,一定要親手調試一下才真正知道。另外對比正常和異常時的行為和log區(qū)別,交叉試驗,才能發(fā)現問題的關鍵。注意各種調試嘗試,各種替換調試,即好的和壞的,好的A和好的C,好的A和壞的D,壞的B和好的C,壞的B和壞的D的交叉調試,才能知道問題所在。另外,需要先寫簡化代碼,驗證簡化版本,再加入后面的功能。
梓潼網站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網頁設計、網站建設、微信開發(fā)、APP開發(fā)、響應式網站等網站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司成立于2013年到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創(chuàng)新互聯(lián)公司。
所有的crash、exception等都最終反映為cpu跳到異常處理程序,異常處理程序根據發(fā)生異常的地方,決定
1)如果在內核棧,則調panic進而回溯出內核棧。如果看crash dump的log時,看到回溯棧前部分在異常代碼中,后部分才是發(fā)生異常的棧,(后部分可能還會出現一部分是中斷處理程序的棧,一部分是中斷處理程序所寄生的線程的棧)。
2)如果判定發(fā)生在用戶態(tài),則異常處理代碼僅給進程發(fā)一個信號,然后切換為用戶態(tài)時,信號處理程序執(zhí)行時,由信號處理程序去回溯應用棧,例如android 的native代碼的debuggerd和java的print callstack,所以用戶態(tài)棧由用戶代碼去回溯。內核棧由內核回溯。 回溯棧依賴于編譯器實現及DWARF等標準。
由于內核棧最大只有8KB,所以編寫內核函數時,需要注意函數局部變量不應太大,例如char A[256];之類的,占用棧大多,會因為一定的棧深度時溢出。所以可以改用static靜態(tài)變量、或者全局變量、或者動態(tài)堆分配。
關于具體的寫linux驅動的方法、技巧和注意事項,歡迎觀看我的《如何編寫linux設備驅動》的視頻:
https://edu.51cto.com/course/17132.html
另外我的相關培訓視頻請看:
歡迎觀看我發(fā)布的各個課程: https://edu.51cto.com/lecturer/8896847.html
另外我的免費的linux各種驅動開發(fā)課程如下:
https://edu.51cto.com/course/17138.html
我的新的更多優(yōu)惠的打包課程鏈接如下:
https://edu.51cto.com/sd/0a9d4
本文名稱:關于linux和linux驅動程序解bug的技巧和思考方法
轉載來源:http://www.chinadenli.net/article16/iheedg.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網站導航、網頁設計公司、虛擬主機、外貿建站、定制網站
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)