我使用兩個虛擬機進行了kgdb設置,兩個虛擬機都具有CentOs 6.4(實際上kgdb主機是目標的克隆)。我成功地能夠連接到遠程目標並開始調試。我想調試RAID驅動程序,特別是raid456.ko。我的問題是,我可以使用gdb下的add-symbol-file命令加載這個raid456.ko的符號後,爲幾個函數設置斷點,但我無法在少數幾個函數上設置斷點。例如,我可以在ops_run_biofill函數上設置斷點,但不能在ops_run_biodrain函數上設置斷點。兩者都是靜態函數,是raid5.c文件的一部分。如果我嘗試設置斷點ops_run_biodrain話,就說明:無法在kgdb設置中設置某些函數的斷點
(GDB)b ops_run_biodrain
功能 「ops_run_biodrain」 沒有定義。 在將來的共享庫加載時將斷點掛起? (y或[n])
爲什麼很少有功能可以調試,爲什麼有些功能不可以呢?
[編輯] --------------------- 我進一步調查了這個問題,我發現使用nm工具我們可以找到任何名稱和虛擬地址的任何符號是某個特定對象文件的一部分。我在raid456.ko上試過nm,發現ops_run_biofill函數在nm命令的輸出中,但ops_run_biodrain不在輸出中。這是否意味着ops_run_biodrain不在raid456.ko中?如果是的話,爲什麼它不是raid456.ko的一部分? ops_run_biodrain不在任何宏檢查下。