linux內核源代碼分析小技巧

1.在內核調試時,我們需要跟蹤函數調用過程,在這時,我們經常會碰到函數指針的情況,對於某個函數指針的賦值,如果直接使用sourceinsight來搜索可能有幾十個的賦值語句,那麼,我們怎麼跟蹤到具體的函數處呢?如何打印出函數指針的函數名?

%p:打印裸指針(raw pointer)

%pF可打印函數指針的函數名和偏移地址

%pf只打印函數指針的函數名,不打印偏移地址。

如printk("%pf",func[0]->action); 結果:
my_Set

2.使用__FILE__,__FUNCTION__,__LINE__來定位執行過程中出錯的位置。

3.查看指針函數實際調用了哪個函數:

1. 在內核中放置打印函數,打印出函數的地址。

2. arm-linux-addr2line 0xXXXXXXXX -e vmlinux-f

查看誰調用了這個函數:

1. 在被調用函數裏放置打印函數,加參數:__builtin_return_address(0)

2. arm-linux-addr2line 0xXXXXXXXX -e vmlinux-f

4.在內核中代碼調用過程難以跟蹤,上下文關係複雜,確實讓人頭痛

調用dump_stack()就會打印當前cpu的堆棧的調用函數了。

如此,一目瞭然的就能看到當前上下文環境,調用關係了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章