qemu gdb不停在断点

首先要保证是在

target remote :1234

之后设置的断点。

如果使用了-enable-kvm,就必须要设置硬件断点,gdb命令为hbreak,缩写为hb。注意硬件断点需要硬件支持,所以不一定有效。

如果是在内核模块里的断点,还需要按以下顺序进行操作:

  1. 编译带有debug symbol的内核模块
ccflags-y += -g -DDEBUG -O1

不能用-O0,可能会报错。

  1. 让gdb自动加载内核模块的符号

先在~/.gdbinit里加上

add-auto-load-safe-path /full_path_to_kernel_build_dir/scripts/gdb/vmlinux-gdb.py

例如

add-auto-load-safe-path /mnt/hdd/kernel/gdb/linux-nova/scripts/gdb/vmlinux-gdb.py

这样gdb里的lx-symbols就可以用了。

然后在gdb里执行:

lx-symbols path/to/parent/of/modules/
  1. insmod

在虚拟机里insmod。这时gdb会自动加载内核模块的符号

  1. 在gdb中设置断点

参考文献

https://cloud.tencent.com/developer/article/1613356
https://stackoverflow.com/questions/18931727/remote-gdb-debugging-does-not-stop-at-breakpoints
https://stackoverflow.com/questions/61568572/cant-get-gdb-to-stop-at-breakpoint-in-linux-kernel-running-under-qemu
内核模块里的断点注意事项

posted @ 2024-09-28 14:14  寻找繁星  阅读(13)  评论(0编辑  收藏  举报