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的堆棧的調用函數了。
如此,一目瞭然的就能看到當前上下文環境,調用關係了