一、简介
在开发linux过程中,当程序代码特别多的时候,很容易就会出现Segmentation fault,这个时候就很让人摸不到头脑,靠打印有时候也找不到,这个时候就可以用gdb试试。
gdb调试有两种方式,一种是远程调试,通过gdbserver远程进行调试,另一种是直接在板子上调试。
通过make menuconfig配置编译后,加了gdb调试的在原来基础上多了1.25M。而gdbserver只有96K,对于FLASH总共才只有8M的路由器来说十分合适。
二、安装gdbserver
- 输入
make menuconfig
,进入配置界面; -
选择Development -> gdbserver,按“Y”选定;
- 保存退出;
- 修改需要调试程序的Makefile,如(
vim package/cpp/src/Makefile
),添加CXXFLAGS += -g - 输入
make package/cpp/compile V=99
,编译名为cpp的程序; - 输入
make V=99
(有的教程说make V=s,因为我之前失败过所以现在分不清楚,如果V=99不行可以试下s) - 将编译后的bin文件烧入开发板。
二、设置开发板和虚拟机同一网段
- 查询开发板IP地址,输入
ifconfig
,看到lan的IP地址为192.168.100.1 -
VMware菜单选择“编辑”-->“虚拟网络编辑器”-->VMnet0桥接模式-->桥接到PC机的无线网卡
-
VMware菜单选择“虚拟机”-->“设置”-->“网络适配器”-->桥接模式及勾选框
-
PC机连接开发板的wifi
- 查询虚拟机IP地址,输入
ifconfig
,看到eth0的IP地址为192.168.100.152 - 至此,开发板IP:192.168.100.1
虚拟机IP:192.168.100.152
三、运行gdbserver
开发板中输入gdbserver 192.168.100.1:3000 (+调试程序名)
三、运行gdb
-
虚拟机中找到mipsel的gdb
- 输入
./mipsel-openwrt-linux-gdb
- 输入
target remote 192.168.100.1:3000
虚拟机中显示:
开发板中显示: - 输入
file (+需调试程序)
- 输入
c
-
开发板上开始执行程序
四、gdb常用命令
• 参考:OpenWRT开发之——远程debug
openwrt下编译及使用gdb调试
gdbserver调试
gdbserver 远程调试问题:设置文件和so搜索路径
GNU Debugger
Openwrt 远程调试