我在調試修改後的Linux-3.11.0內核時遇到問題。 爲了調試代碼,我使用:遠程gdb調試不會在斷點處停止
- GDB 7.6
- QEMU 1.6.5
- Linux內核3.11.0
我的系統有英特爾(R)酷睿(TM)17 -2760QM CPU @ 2.40GHz運行Ubuntu 12.10
我使用'make menuconfig'創建了一個配置文件來編譯修改後的內核。 (與在「內核黑客」類別修改)
一些config文件行(即我找到相關的)都在這裏引述:
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_KERNEL=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_FS=y
CONFIG_HAVE_HW_BREAKPOINT=y
CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y
我用QEMU與「-S」選項啓動我的內核,並用gdb我連接到QEMU,並恢復它的執行:
(gdb) target remote :1234
(gdb) continue
當設置斷點,對於一個例子: break schedule
我收到一條確認消息,如:
Breakpoint 1 at 0xffffffff81736400: file kernel/sched/core.c, line 2509.
因此,直到這裏一切似乎都很好!
問題是gdb和qemu不會停在斷點處! 他們都僅僅只是繼續執行...
我試圖設置硬件斷點在一些地方建議,但我得到的消息:
No hardware breakpoint support in the target.
這是奇怪,因爲我有CONFIG_HAVE_HW_BREAKPOINT集。
我也沒有設置CONFIG_DEBUG_RODATA
在其他地方的建議,但仍然沒有結果...
我用config文件試圖勾搭的建議在這裏:gdbserver inside qemu does not stop on breakpoints但我無法找出相關的差異在工作.config文件和我的.config文件之間...(有太多的區別!)
任何人都可以請幫助我嗎?
謝謝!
你如何告訴qemu正在運行的內核正在被調試?你在哪裏設置港口「1234」?我之前沒有使用過qemu,但如果可以的話,請嘗試啓用KGDB/KDB並通過串行鏈接運行您的內核。 – srd
我使用-s和-S標誌。 Qemu啓動並等待gdb連接到默認端口 - 1234.只有當我按下gdb端的繼續時,Qemu纔會恢復執行。所以gdb和Qemu之間的連接很好...... – Noamiko