Skip to content

network - 远程gdbserver

::: tip 场景

当我们出差或者到客户那边联调时,由于你很难带开发服务器192.168.5.251一起出差,导致我们进行gdb调试异常困难,这我们就需要用到内网穿透的方式进行联调了。

:::

前期准备

  • 需要一台具备公网IP地址的VPS服务器;

  • 开发服务器192.168.5.251能访问上面的VPS服务器;

  • 出差调试的网关能访问上面提到的VPS服务器;

  • 下载Frp软件

  • 下载时,请注意CPU架构,如果VPS和调试的网关的架构不同,那么你需要下载两份;

  • VPS服务器需要运行frps服务端程序;

  • 调试的网关需要运行frpc客户端程序;

VPS服务器

  • 编辑下载后的frps.ini服务端配置

    [common]
    bind_port = 7000
    

    • 上面的7000端口为开放给frpc客户端程序连接的端口,保留默认7000即可.
  • 在VPS服务器上运行frps服务端程序

    nohup ./frps -c ./frps.ini &
    

调试的网关

  • 编辑下载后的frpc.ini客户端端配置

    [common]
    server_addr = yy.yy.yy.yy
    server_port = 7000
    
    [gdbserver]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 9000
    remote_port = 9000
    
    • server_addr是VPS的公网IP地址;
    • [gdbserver]可以随便命名;
    • local_port是在调试网关运行gdbserver命令暴露的端口;
    • remote_port是开发服务器192.168.5.251远程连接调试网关用到的端口,可以和local_port端口不一样;
    • remote_portserver_port端口需要在VPS的防火墙放开,否则无法frpc无法连接frps
  • 在调试网关上运行frpc客户端程序

    nohup ./frpc -c ./frpc.ini &
    

  • 开启gdbserver

  • 如果没有gdbserver命令,那么需要额外安装gdbserver的ipk包;

  • 有两种方式开启gdbserver;
    • 把pubmsg主程序停掉,重新运行 gdbserver --once :9000 /usr/bin/pubmsg
    • 不想停止pubmsg主程序,想抓取pubmsg主程序现在出现bug的状态和位置,可以attach进程gdbserver :9000 --attach {pubmsg-pid}

开发服务器

  • 在开发服务器上运行gdb客户端

    ./scripts/remote-gdb yy.yy.yy.yy:9000 ./build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/pubmsg-esl/pubmsg