QEMU/使用 QEMU 除錯
外觀
< QEMU
QEMU 提供了一種舒適的方式進行系統範圍的除錯;此環境特別適合於除錯作業系統核心和韌體。
實際上,您可以連線任何支援 GDB 遠端協議的偵錯程式。但是,在以下示例中,我們將使用 GNU 偵錯程式。
使用 -S 命令列開關啟動 QEMU 可以阻止 CPU 啟動。這為偵錯程式連線提供了時間,並允許從一開始就進行除錯,甚至包括早期的平臺韌體。
要開始執行,您必須透過偵錯程式或監視器控制檯向 QEMU 傳送“continue”命令。
-gdb {device} 命令列開關允許您指定 QEMU 在指定裝置中等待連線。
它可以接受 serial, socket, udp, tcp, stdio 等。例如,-gdb tcp::9000 用於監聽埠 9000,然後您可以在 GDB 中使用 target remote localhost:9000 連線到它。
-s 開關是 -gdb tcp::1234 的簡寫。
可以從 GDB 內部啟動 QEMU;您可以方便地將所需命令儲存到一個檔案,並讓 GDB 載入該指令碼。
例如,假設您有一個非常簡單的自定義 MBR,它在 0x7E00 處的保護模式下載入核心,您可以使用類似以下內容除錯兩者
add-symbol-file stage0.elf 0x7c00
add-symbol-file stage1.elf 0x7e00
target remote | qemu -S -gdb stdio -m 16 -boot c -hda drive0.img
然後,您可以像這樣啟動它:gdb -x script.gdb
透過指令碼編寫和設定斷點,可以實現更復雜的設定,同時考慮到執行時重新定位。這在除錯引導程式碼時很常見,引導程式碼在載入下一階段之前會重新定位自身(例如,標準 MBR)。