当前位置: 首页 > article >正文

Linux/MacOS中如何远程调试C/C++程序

在 Linux 或 macOS 中远程调试 C/C++ 程序,可以使用 gdb(GNU Debugger)或 lldb(LLVM Debugger)结合 SSH 或 NAT/VPN 来实现远程调试。以下是详细的步骤和方法:


1. 远程调试的需求和准备

  • 目标机器:运行需要调试的程序(通常是远程服务器)。
  • 调试机器:运行调试器(通常是本地开发机)。
  • 目标程序:必须是使用调试符号(-g 选项)编译的 C/C++ 程序。
编译程序

确保目标程序是用调试符号编译的:

gcc -g -o my_program my_program.c


2. 使用 gdb 远程调试

步骤 1:在目标机器上启动 gdbserver

gdbserver 是 gdb 的远程调试工具,需要安装在目标机器上。

  • 安装 gdbserver(如果未安装):

    sudo apt install gdbserver  # Ubuntu
    brew install gdbserver      # macOS
    
  • 启动 gdbserver
    指定远程调试的端口(例如 1234)和需要调试的程序:

    gdbserver :1234 ./my_program
    

    此时,gdbserver 会等待调试器的连接。

步骤 2:在调试机器上启动 gdb 并连接到 gdbserver
  • 在调试机器上安装 gdb(如果未安装):

    sudo apt install gdb  # Ubuntu
    brew install gdb      # macOS
    
  • 启动 gdb 并连接到远程 gdbserver
    在调试机器上运行以下命令:

    gdb ./my_program
    

    进入 gdb 后,连接到目标机器:

    (gdb) target remote <目标机器IP>:1234
    

    例如,如果目标机器的 IP 是 192.168.1.100,命令如下:

    (gdb) target remote 192.168.1.100:1234
    
步骤 3:开始调试

连接成功后,可以使用 gdb 的常用命令进行调试:

  • run:运行程序。
  • break <函数名> 或 break <行号>:设置断点。
  • next:单步执行。
  • print <变量>:查看变量值。
  • continue:继续执行。

3. 使用 lldb 远程调试

lldb 是 LLVM 项目中的调试器,功能类似于 gdb,但更适合 macOS 和现代 C++ 开发。

步骤 1:在目标机器上启动 debugserver

debugserver 是 lldb 的远程调试工具,通常预装在 macOS 上,Linux 需要安装。

  • 启动 debugserver
    指定远程调试的端口(例如 1234)和需要调试的程序:
    debugserver :1234 ./my_program
    
步骤 2:在调试机器上启动 lldb 并连接到 debugserver
  • 在调试机器上安装 lldb(如果未安装):

    sudo apt install lldb  # Ubuntu
    brew install lldb      # macOS
    
  • 启动 lldb 并连接到远程 debugserver
    在调试机器上运行以下命令:

    lldb ./my_program
    

    进入 lldb 后,连接到目标机器:

    (lldb) process connect connect://<目标机器IP>:1234
    

    例如,如果目标机器的 IP 是 192.168.1.100,命令如下:

    (lldb) process connect connect://192.168.1.100:1234
    
步骤 3:开始调试

连接成功后,可以使用 lldb 的常用命令进行调试:

  • run:运行程序。
  • breakpoint set --name <函数名>:设置断点。
  • next:单步执行。
  • expr <变量>:查看变量值。
  • continue:继续执行。

4. 通过 SSH 远程调试

如果目标机器和调试机器位于不同的网络环境中,可以通过 SSH 隧道实现远程调试。

步骤 1:建立 SSH 隧道

在调试机器上运行以下命令:

ssh -L 1234:localhost:1234 user@<目标机器IP>

  • -L 1234:localhost:1234:将本地端口 1234 转发到目标机器的 1234 端口。
  • user@<目标机器IP>:指定目标机器的用户名和 IP 地址。
步骤 2:在目标机器上启动 gdbserver 或 debugserver

通过 SSH 登录到目标机器后,按照上述方法启动 gdbserver 或 debugserver

gdbserver :1234 ./my_program

步骤 3:在调试机器上连接到本地端口

在调试机器上运行 gdb 或 lldb,并连接到本地端口:

(gdb) target remote localhost:1234

(lldb) process connect connect://localhost:1234


5. 通过 VPN/NAT 实现远程调试

如果目标机器和调试机器位于不同的网络环境中,建议通过 VPN 或 NAT 打通网络连接,然后按照上述方法直接使用 gdbserver 或 debugserver


总结

工具适合平台远程工具连接方式
gdbLinux, macOSgdbservertarget remote
lldbLinux, macOSdebugserverprocess connect
  • 如果开发环境主要在 Linux,推荐使用 gdb + gdbserver
  • 如果开发环境主要在 macOS,推荐使用 lldb + debugserver

通过以上方法,您可以在 Linux 或 macOS 中实现远程调试 C/C++ 程序。


http://www.kler.cn/a/506339.html

相关文章:

  • Jmeter 简单使用、生成测试报告(一)
  • docker一张图理解
  • ubuntu下安装编译cmake,grpc与protobuf
  • 一次完整的tcpdump -XX输出报文详解
  • SpringBoot整合Dubbo+zookeper[详细版]
  • 鸿蒙打包发布
  • 无公网IP 实现外网访问本地 Docker 部署 Navidrome
  • NanoKVM简单开箱测评和拆解,让普通电脑实现BMC/IPMI远程管理功能
  • Redis基础3-主从复制
  • 得物App利用技术赋能,打造潮流消费“新玩法”
  • 全面了解 Web 前端技术:从基础到实践
  • JavaScript中的`void 0`:一个古老而安全的`undefined`获取方式
  • mac m4 安装 node
  • ResNet (Residual Network) - 残差网络:深度卷积神经网络的突破
  • Three.js+Vue3+Vite物体位移、缩放与旋转(二)
  • 【MySQL】使用C语言链接
  • R语言基础| 方差分析
  • 浅谈云计算11 | 虚拟机的主要功能
  • (RAG系列)FastGPT批量添加索引
  • WXML模版语法-事件绑定
  • 前端常见的设计模式之【单例模式】
  • 【机器学习:二十三、迁移学习】
  • 冯·诺依曼体系结构:计算机科学的奠基石
  • linux、华为modelarts、昇腾服务器、docker中,服务进程还在,但是不在运行状态,没有响应
  • 133、sqlserver查看哪个表被锁表了以及解锁方法
  • MIAOYUN信创云原生项目亮相西部“中试”生态对接活动