n 調(diào)試器和被調(diào)試進(jìn)程運(yùn)行在不同的機(jī)器上,調(diào)試器運(yùn)行在PC機(jī)(宿主機(jī)),而被調(diào)試的進(jìn)程則運(yùn)行在各種專業(yè)調(diào)試板上(目標(biāo)板)。
n 調(diào)試器通過(guò)某種通信方式(串口、并口、網(wǎng)絡(luò)、JTAG等)控制被調(diào)試進(jìn)程。
n 在目標(biāo)機(jī)上一般會(huì)具備某種形式的調(diào)試代理,它負(fù)責(zé)與調(diào)試器共同配合完成對(duì)目標(biāo)機(jī)上運(yùn)行著的進(jìn)程的調(diào)試。這種調(diào)試代理可能是某些支持調(diào)試功能的硬件設(shè)備,也可能是某些專門(mén)的調(diào)試軟件(如gdbserver)。
n 目標(biāo)機(jī)可能是某種形式的系統(tǒng)仿真器,通過(guò)在宿主機(jī)上運(yùn)行目標(biāo)機(jī)的仿真軟件,整個(gè)調(diào)試過(guò)程可以在一臺(tái)計(jì)算機(jī)上運(yùn)行。此時(shí)物理上雖然只有一臺(tái)計(jì)算機(jī),但邏輯上仍然存在著宿主機(jī)和目標(biāo)機(jī)的區(qū)別。
n 首先,建立調(diào)試器(本地gdb)與目標(biāo)操作系統(tǒng)的通信連接,可通過(guò)串口、網(wǎng)卡、并口等多種方式。
n 然后,在目標(biāo)機(jī)上開(kāi)啟GdbServer進(jìn)程,并監(jiān)聽(tīng)對(duì)應(yīng)端口。
n 在宿主機(jī)上運(yùn)行調(diào)試器gdb,這時(shí),gdb就會(huì)自動(dòng)尋找遠(yuǎn)端的通信進(jìn)程,也就是GdbServer的所在進(jìn)程。
n 在宿主機(jī)上的gdb通過(guò)GdbServer請(qǐng)求對(duì)目標(biāo)機(jī)上的程序發(fā)出控制命令。這時(shí),GdbServer將請(qǐng)求轉(zhuǎn)化為程序的地址空間或目標(biāo)平臺(tái)的某些寄存器的訪問(wèn),這對(duì)于沒(méi)有虛擬存儲(chǔ)器的簡(jiǎn)單的嵌入式操作系統(tǒng)而言,是十分容易的。
n GdbServer把目標(biāo)操作系統(tǒng)的所有異常處理轉(zhuǎn)向通信模塊,并告知宿主機(jī)上gdb當(dāng)前有異常。
n 宿主機(jī)上的gdb向用戶顯示被調(diào)試程序產(chǎn)生了哪一類(lèi)異常。
n 采用ROMMonitor方式進(jìn)行交叉調(diào)試需要在宿主機(jī)上運(yùn)行調(diào)試器,在宿主機(jī)上運(yùn)行ROM監(jiān)視器(ROMMonitor)和被調(diào)試程序,宿主機(jī)通過(guò)調(diào)試器與目標(biāo)機(jī)上的ROM監(jiān)視器遵循遠(yuǎn)程調(diào)試協(xié)議建立通信連接。ROM監(jiān)視器可以是一段運(yùn)行在目標(biāo)機(jī)ROM上的可執(zhí)行程序,也可以是一個(gè)專門(mén)的硬件調(diào)試設(shè)備,它負(fù)責(zé)監(jiān)控目標(biāo)機(jī)上被調(diào)試程序的運(yùn)行情況,能夠與宿主機(jī)端的調(diào)試器一同完成對(duì)應(yīng)用程序的調(diào)試。
n 采用In-CircuitEmulator(ICE)方式進(jìn)行交叉調(diào)試時(shí)需要使用在線仿真器,它是目前最為有效的嵌入式系統(tǒng)的調(diào)試手段。它是仿照目標(biāo)機(jī)上的CPU而專門(mén)設(shè)計(jì)的硬件,可以完全仿真處理器芯片的行為。仿真器與目標(biāo)板可以通過(guò)仿真頭連接,與宿主機(jī)可以通過(guò)串口、并口、網(wǎng)線或USB口等連接方式。由于仿真器自成體系,所以調(diào)試時(shí)既可以連接目標(biāo)板,也可以不連接目標(biāo)板。