我想调试我的代码,它也有一些内核模块。我能够在内核和我的代码中设置断点。执行操作会命中内核代码中设置的断点,但不会命中我代码中的断点。
目标机器:要在其上调试代码的机器主机:用于调试代码的机器
遵循的步骤:在主机上:
$ gdb vmlinux
(vmlinux copied from target machine )
$ gdb> target remote /dev/ttyS1
$ cont
continuing
在目标上: $ insmod mymodule.ko $ cd /sys/module/mymodule/sections/ $ cat .data $ cat .rodata $ cat .bss $ cat .text
$ echo "g" > /proc/sysrq-trigger
在主机上:
$ add-symbol-file <module_name> <address> \
-s .bss <address> \
-s .rodata <address> \
-s .data <address>
$ b file_name //set break points
$ c
continuing
在目标上:执行命令(程序)......但它没有达到断点......在没有达到断点的情况下完成执行。
但是,当我尝试为 vfs_read() 之类的内核函数设置断点时,就会遇到断点。