2013-09-21 187 views
2

我在調試修改後的Linux-3.11.0內核時遇到問題。 爲了調試代碼,我使用:遠程gdb調試不會在斷點處停止

  1. GDB 7.6
  2. QEMU 1.6.5
  3. 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文件之間...(有太多的區別!)

任何人都可以請幫助我嗎?

謝謝!

+0

你如何告訴qemu正在運行的內核正在被調試?你在哪裏設置港口「1234」?我之前沒有使用過qemu,但如果可以的話,請嘗試啓用KGDB/KDB並通過串行鏈接運行您的內核。 – srd

+0

我使用-s和-S標誌。 Qemu啓動並等待gdb連接到默認端口 - 1234.只有當我按下gdb端的繼續時,Qemu纔會恢復執行。所以gdb和Qemu之間的連接很好...... – Noamiko

回答

4

好的,我發現了這個問題,所以我在這裏發佈給其他人: 顯然這是一個非常微妙的過程...我的配置文件很好。我只需要在連接到qemu之後定義斷點,而不是在加載vmlinux之後定義斷點。這些斷點必須是硬件斷點......否則它們不會中斷!

+1

如果你還在那裏......你能用一個例子更新這個答案嗎?這裏不清楚什麼是「......只有在連接到qemu之後,而不是在加載vmlinux之後」意味着什麼。謝謝! – larsks

+0

嗯,它只是意味着你首先必須連接gdb到qemu,然後才能定義斷點... 如果你按照相反的順序來做 - 你會看到一些消息告訴你斷點已經設置好了,但沒有任何東西會發生,它根本無法工作。 – Noamiko

+0

@Noamiko你好,我有一個非常類似的問題,但我沒有使用遠程gdb 我在我的VM機器和gdb不停在斷點 我該怎麼辦? – user1993748

相關問題