在內核中代碼調用過程難以跟蹤,上下文關係複雜,確實讓人頭痛
調用dump_stack()就會打印當前cpu的堆棧的調用函數了,如此,一目瞭然的就能看到當前上下文環境,調用關係了
1.使用方法
需要包含的頭文件:#include <asm/ptrace.h>
在函數中調用:dump_stack();
2.實例
假設遇到uvc_probe_video這麼一個函數,不知道它最終是被誰調用到的,根據linux設備模型,初步推測,probe應該是設備適配驅動時總線輪訓到的,也只能是猜測,也根本無法猜測是否是中斷上下文環境。
加入這條函數
再看打印,發現如下
原來並不是在適配設備啊,只是ioctl掉用的而已。
參考:
http://blog.csdn.net/zhengkarl/article/details/5693570
http://blog.csdn.net/dragon101788/article/details/9419175