Openwrt GNU Debugger(GDB)
首先make menuconfig
, 选择gdb相关选项。
添加 gdb。(可以在路由器开发板调试,空间有限所以不建议)。
Advanced configuration options (for developers) → Toolchain Options → Build gdb
添加 gdbserver
Development → gdbserver
如果位置不一样/
搜一下找到对应位置
第二步
在需要调试的包(package)的Makefile增加调试选项
TARGET_CFLAGS += -ggdb3
或者:
单独编译包时 (建议)
make package/xxxxx/{clean,compile} V=s STRIP=/bin/true CONFIG_DEBUG=y
或者:
使能debug选项:make menuconfig
Global build settings > Compile packages with debugging info
第三步
将编译好的固件传到目标板上,并安装。
tftp -gr gdbserver_8.3.1-1_mipsel_24kc.ipk 192.168.5.55
tftp -gr xxx.ipk 192.168.5.55opkg install gdbserver_8.3.1-1_mipsel_24kc.ipk
opkg install xxx.ipk
第四步
在目标板上(OpenWRT路由)上开启gdbserver
gdbserver :9000 /bin/hellogdb
gdbserver --once --remote-debug :9000 /usr/bin/hellogdb
第五步
在编译主机上开启gdb(假如调试 hellogdb)
./scripts/remote-gdb 192.168.x.x:9000 ./build_dir/target-*/hellogdb/hellogdb
./scripts/remote-gdb 192.168.5.84:9000 ./build_dir/target-mipsel_24kc_musl/xxx/xx
实操
编译烧写固件
make menuconfig
添加gdbserver选项,gdb不选,意义不大。然后编译烧写固件。
编译安装包
写hellogdb示例并在menuconfig中选中,参考OpenWrt添加软件包之二helloworld实例
这里仿照写为hellogdb
(上述第二步 一、二种方式都可以,第三种没试过)。
两个Makefile都可以,为测试方便直接以参数形式写入src/Makefile.
然后menuconfig选中编译
选为M,不编译进内核
编译make V=s package/hellogdb/compile
如果没有在Makefile中写则make V=s package/hellogdb/compile CONFIG_DEBUG=y
拷贝openwrt/bin/ramips/packages/base/hellogdb_xxx.ipk
到路由器安装opkg install hellogdb_*.ipk
然后执行gdbserver :9000 /bin/hellogdb
主机上执行(注意必须在同一网段)ip为路由器ip./scripts/remote-gdb 192.168.x.x:9000 ./build_dir/target-mipsel*/hellogdb/hellogdb
设置断点 执行下一步:
成功。注意调试在主机,打印在路由器上。
monitor exit
关闭退出gdbserver