수정 된 Linux-3.11.0 커널 디버깅에 문제가 있습니다. 코드를 디버깅 들어, 내가 사용원격 gdb 디버깅이 중단 점에서 중지되지 않음
- GDB에게 7.6
- QEMU 1.6.5
- 리눅스 커널 3.11.0
내 시스템은 인텔 (R) 코어 (TM) I7있다 -2760QM CPU @ 2.40GHz 우분투 실행 12.10
'make menuconfig'를 사용하여 만든 구성 파일로 수정 된 커널을 컴파일했습니다.
(이하 "커널 해킹 '분류에 수정을)를 .config 파일 라인 (I 관련 찾을 수 있음)의 일부는 여기에 인용 :
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
난에"-S "옵션을 QEMU를 사용 그것이 실행의 내가 QEMU에 연결하고 다시 내 커널을 부팅하고, GDB를 사용하여 :
(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
,하지만 여전히 결과가 없습니다 ...
: gdbserver inside qemu does not stop on breakpoints하지만 관련 차이를 알아낼 수 작업 .config 파일과 내 .config 파일 ... (너무 많은 차이가 있습니다!)
아무도 도와 줄 수 있습니까?
감사합니다 !!
실행중인 커널이 디버깅되고 있음을 어떻게 알 수 있습니까? 어디에서 포트 "1234"를 설정합니까? qemu를 사용하지는 않았지만 가능한 경우 KGDB/KDB를 활성화하고 직렬 링크를 통해 커널을 실행 해보십시오. – srd
-s 및 -S 플래그를 사용합니다. Qemu가 시작되고 gdb가 기본 포트 인 1234에 연결될 때까지 기다립니다. gdb 쪽에서 계속을 누르면 Qemu가 실행을 다시 시작합니다. 그래서 gdb와 Qemu 사이의 연결은 괜찮습니다 ... – Noamiko