Linux內(nèi)核設(shè)備驅(qū)動(dòng)之內(nèi)核的調(diào)試技術(shù)筆記整理
/****************** * 內(nèi)核的調(diào)試技術(shù) ******************/
(1)內(nèi)核源代碼中的一些與調(diào)試相關(guān)的配置選項(xiàng)
內(nèi)核的配置選項(xiàng)中包含了一些與內(nèi)核調(diào)試相關(guān)的選項(xiàng),都集中在"kernel hacking"菜單中。包括:
CONFIG_DEBUG_KERNEL
使其他的調(diào)試選項(xiàng)可用,應(yīng)該選中,其本身不會(huì)打開所有的調(diào)試功能。
具體的調(diào)試選項(xiàng)說(shuō)明可參見驅(qū)動(dòng)一書,或通過(guò)menuconfig的help說(shuō)明查看。
(2)如何通過(guò)宏對(duì)printk調(diào)試語(yǔ)句進(jìn)行全局控制
通過(guò)和Makefile配合,可以在c文件中定義屬于我們自己的調(diào)試語(yǔ)句。
(3)strace的使用
strace可以跟蹤由用戶空間程序所發(fā)出的所有系統(tǒng)調(diào)用。有用的參數(shù)有:
- -t 顯示調(diào)用發(fā)生的時(shí)間
- -T 顯式調(diào)用所花費(fèi)的時(shí)間
- -e 限定被跟蹤的系統(tǒng)調(diào)用類型,如"-e execve"
- -f 跟蹤所有子進(jìn)程
- -p 跟蹤特定進(jìn)程。如"-p 8856"
- -o 將輸出的信息導(dǎo)入特定的文件
strace對(duì)于發(fā)現(xiàn)系統(tǒng)調(diào)用時(shí)的細(xì)微錯(cuò)誤非常有用,尤其是針對(duì)多進(jìn)程的程序,可以通過(guò)strace輸出的返回值和進(jìn)程pid獲得大量有用信息。如:
$>strace -o zht.txt -f ./process_create
(4)ltrace的使用
ltrace可以跟蹤由用戶空間程序所發(fā)出的所有動(dòng)態(tài)庫(kù)函數(shù)調(diào)用。有用的參數(shù)有:
- -t 顯示調(diào)用發(fā)生的時(shí)間
- -T 顯式調(diào)用所花費(fèi)的時(shí)間
- -f 跟蹤所有子進(jìn)程
- -p 跟蹤特定進(jìn)程
- -o 將輸出的信息導(dǎo)入特定的文件
(5)查看oops消息
oops是內(nèi)核告知用戶有不幸發(fā)生的最常用方式。通常,發(fā)送完oops后,內(nèi)核會(huì)處于一種不穩(wěn)定狀態(tài)。
在某些情況下,oops會(huì)導(dǎo)致內(nèi)核混亂,而混亂的結(jié)果就是死機(jī),這些情況可能包括:
- *oops發(fā)生在持有鎖的代碼中
- *oops發(fā)生在和硬件設(shè)備通訊的過(guò)程中
- *oops在中斷上下文中發(fā)生
- *oops發(fā)生在idle進(jìn)程(0)或init進(jìn)程(1),因?yàn)閮?nèi)核沒(méi)有這兩個(gè)進(jìn)程沒(méi)法工作
如果oops在其他進(jìn)程運(yùn)行時(shí)發(fā)生,內(nèi)核會(huì)殺死該進(jìn)程并嘗試著繼續(xù)運(yùn)行。oops的產(chǎn)生有很多原因,包括內(nèi)存訪問(wèn)越界或非法指令等。
oops包含的最重要訊息是寄存器上下文和回溯線索(call trace)可以人為引起oops,如:
if(bad_thing) BUG(); //或 BUG_ON(bad_thing);
可以用panic()引發(fā)更嚴(yán)重的錯(cuò)誤,調(diào)用panic()不但會(huì)打印錯(cuò)誤信息,還會(huì)掛起整個(gè)系統(tǒng)。只有在極端惡劣的情況下才會(huì)使用:
if(terrible_thing) panic("foo is %ld!\n", foo);
有些時(shí)候,只要打印一下棧信息就可以幫助測(cè)試,如dump_stack():
if(!debug_check){ printk(KERNEL_DEBUG "provide some info\n"); dump_stack(); }
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
詳解linux下fsevents模塊引起的npm ls報(bào)錯(cuò)解決辦法
這篇文章主要介紹了詳解linux下fsevents模塊引起的npm ls報(bào)錯(cuò)解決辦法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04PHP程序員玩轉(zhuǎn)Linux系列 自動(dòng)備份與SVN
這篇文章主要為大家詳細(xì)介紹了PHP程序員玩轉(zhuǎn)Linux系列文章,學(xué)習(xí)自動(dòng)備份與SVN教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04Centos7服務(wù)器下啟動(dòng)jar包項(xiàng)目的最佳方法
這篇文章主要給大家分享介紹了關(guān)于Centos7服務(wù)器下啟動(dòng)jar包項(xiàng)目的最佳方法,文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03apache負(fù)載均衡的安裝和實(shí)現(xiàn)方法
在負(fù)載均衡技術(shù)中,硬件設(shè)備是比較昂貴的,對(duì)于負(fù)載均衡的學(xué)習(xí)者如果不是在企業(yè)中應(yīng)用或者是學(xué)員中學(xué)習(xí),很少有機(jī)會(huì)能碰到實(shí)際操作的訓(xùn)練。所以,很多朋友都會(huì)選擇軟件方面的設(shè)置進(jìn)行研究。現(xiàn)在我們就來(lái)介紹一下再Apache下的Tomcat負(fù)載均衡的一些使用問(wèn)題2012-10-10簡(jiǎn)單了解linux終端創(chuàng)建文件的2種常用方法
這篇文章主要介紹了簡(jiǎn)單了解linux終端創(chuàng)建文件的2種常用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06