OpenWRT下的GDB远程调试

编写的程序部署到OpenWRT上出错,打日志是一个好办法,但是今天遇到的情况,日志也不能 显示出正确的程序流程,实在诡异,因此决定尝试调试器。

路由器中的存储空间十分有限,OpenWRT的包管理器opkg提供的GDB占用大约1.5MB空间。路由器 本身有8M的存储空间,目前只剩200KB了,GDB的大小不能接受。相比之下,GDBServer的大小 不到100KB,这是可以接受的。

下面是使用GDBServer远程调试的方法:

  • 路由器端

    1. 安装GDBServer

        opkg install gdbserver
      
    2. 进入目录,运行GDBServer,监听到网络端口

        gdbserver 192.168.8.1:4455 tubed
      
  • 计算机端

    1. 根据OpenWRT SDK的位置设置环境变量

    2. 进入被调试文件的所在目录,这是为了向GDB提供程序的调试信息

    3. 指定被调试的程序文件,启动gdb

        mips-openwrt-linux-gdb tubed
      
    4. 在GDB中连接远程调试器

        target remote 192.168.8.1:4455
      

如果连接成功,则此时就可以像平常一样使用GDB来调试程序了,不过调试目标是位于路由器的 程序。使用这个方法可以很轻易的定位到程序错误的位置。毕竟是动态调试。话说回来,既然 可以做到GDB远程调试,也许可以把部署、调试的环节通过Makefile整合到Xcode项目中来?

有空可以试一下看看。

Comments