2016-04-19 32 views
0

我認爲標題說明了一切! :)在調試會話中切換遠程KGDB和本地DDB

我想知道在調試遠程內核時是否確實有辦法在gdb和ddb之間切換。

我已經在gdb(或更確切地說是kgdb)提示符下。從這裏如何切換到調試機器上的本地ddb?

我的內核配置文件中已經包含options BREAK_TO_DEBUGGER和我都GDB和DDB配置又名: options GDB options DDB

由於每developer's handbook,「每次輸入gdb時,該模式將遠程GDB與本地DDB之間進行切換。爲了立即強制下一個陷阱,只需鍵入s(step)。你的託管GDB現在可以控制目標內核:「

所以,我確實在gdb提示符下鍵入'gdb' :D)和預期的一樣,這是一個無法識別的命令。顯然,這個命令應該在ddb提示符下輸入。但我的問題是,我怎麼從一臺正在運行的機器中下載ddb,串行端口(儘管是虛擬的)遠程連接到另一臺機器的KGDB上?當遠程GDB正在監聽並使用sysctl debug.kdb.enter=1強制一次恐慌時,它確實會進入遠程KGDB。但是,當它不在監聽時,系統會凍結。

我想要的是在本地機器上輸入ddb。使用它進行一些調試;放到遠程KGDB中,用KGDB做最好的事情,等我完成後再切換回本地DDB。

有沒有辦法做到這一點?如果是,請讓我知道

回答

0

KDB包含DDB & KDB後端,但有很多條件時,他們可用。要檢查後端是否可用,請檢查sysctl debug.kdb.available和debug.kdb.current(sys/kern/subr_kdb.c)。如果兩個後端都可用,debug.kdb.available應該包含「ddb gdb」。

在後端(gdb/ddb)之間切換的可能方式是先輸入ddb,然後調用gdb並進行調試。然後退出gdb,並返回ddb(實際上會發生新的陷阱,似乎需要Ctrl + C)。這意味着在恐慌之前,debug.kdb.current應該被設置爲「ddb」。

我希望這會有所幫助。

+0

'的sysctl debug.kdb.available'給出'DDB gdb' '的sysctl debug.kdb.current'給出'gdb' 我試圖CTRL-C在DDB提示(GDB時是活躍的),以將控制權返還給GDB,但無濟於事。 如果我玩弄'debug.kdb.current',我可以達到我的目標嗎? – HighOnMeat

+0

不確定。應該有1個後端及時。從DDB到GDB的轉換是「gdb」命令,轉換回是終止gdb。 –

+0

我用'sysctl debug.kdb.current = ddb'將當前後端更改爲ddb。然後我引發了恐慌,我在ddb提示符下。在這裏鍵入'gdb'將機器連接到客戶端機器上的gdb後端。 但是,退出gdb會讓我回到調試機器上的shell提示符,而不是ddb。這是應該如何? – HighOnMeat

相關問題