ฉันกำลังแก้ไขจุดบกพร่อง Linux Kernel (เวอร์ชันล่าสุด) โดยใช้ GDB และ QEMU
ฉันได้ตั้งค่า DEBUG_INFO เป็นใช่ในไฟล์การกำหนดค่า
นี่คือวิธีที่ฉันเรียก QEMU:
$> qemu-system-x86_64 -snapshot -m 4G -serial stdio -kernel ~/Documents/kernel/arch/x86_64/boot/bzImage -initrd ~/D\
ocuments/kernel/initrd/initrd_x86_64.gz -append "root=/dev/sda1 ignore_loglevel" -s
และ GDB แน่นอน:
$> gdb vmlinux
จากนั้นภายใน gdb:
(gdb)> target remote :1234
ไม่มีอะไรน่าทึ่งเลย
มันหยุด QEMU ฉันตั้งค่าเบรกพอยท์ซึ่งดูเหมือนว่าจะทำงานได้ตามปกติ และฉันก็พิมพ์ "ดำเนินการต่อ" การดำเนินการ QEMU ดำเนินการต่อ
แต่ถึงแม้ว่าฟังก์ชั่นของฉันจะถึงแล้ว (ฉันเห็นข้อความเคอร์เนล printk ที่ฉันตั้งไว้ในฟังก์ชั่น) gdb ก็ไม่หยุด
$> qemu-system-x86_64 --version
QEMU emulator version 2.12.0 (Debian 1:2.12+dfsg-3)
Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers
และ
$> gdb --version
GNU gdb (Debian 8.1-4) 8.1
ฉันไม่รู้ว่าจะลองทำอะไรต่อไป ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม
PS: สำหรับข้อมูล ฉันกำลังเขียนคีย์ล็อกเกอร์เป็นไดรเวอร์ Linux ดังนั้นฉันจึงลงทะเบียนตัวแจ้งเตือนแป้นพิมพ์ใหม่และนี่คือตัวแจ้งเตือนแป้นพิมพ์ที่ล้มเหลว
PS2: ฉันยังได้ลองสิ่งที่พวกเขาแนะนำที่นี่ คำถามสแต็กโอเวอร์โฟลว์เกี่ยวกับการตั้งค่าเบรกพอยต์ฮาร์ดแวร์ แทน แต่ก็ไม่ได้เปลี่ยนแปลงอะไร ปัญหาเดิม
ขอบคุณ
จูเลียน