LinuxCNC远程调试

Linux 环境下一般使用 GDB 进行调试,但是在调试大型程序时不太方便,比如线程来回切换、查看堆栈等,不是那么直观。使用 VC++ 进行远程调试,有 GUI 界面,比较方便直观查看线程切换、堆栈、函数参数值等等。下面介绍如何使用 VC++ 远程调试 Linux 程序。

环境准备

Linux 系统上要安装 GDB 和 gcc/g++ 之类的,以便能够编译 C/C++ 代码。

注意:编译程序时需加上 -g 选项,否则无法命中断点。

远程调试

说明一下,VC++ 要能远程调试 Linux 程序,需要的 VC++ 版本会比较高,比如 Visual Studio 2017/2019 等,但是版本不限,专业版、社区版都可以。

  1. 在 Linux 上启动程序,如下图所示

在这里插入图片描述

  1. 从 VS 的【附加到进程】选项向导中选择连接类型为 SSH,并输入 Linux 系统的 IP 地址

在这里插入图片描述

然后回车,输入用户名和密码,并执行连接,如下图所示

注意:建议使用 root 用户连接调试,避免因为权限不足导致无法访问部分共享库。

在这里插入图片描述

  1. 设置调试类型为 Native(GDB),如下图所示

在这里插入图片描述

  1. 从可用进程列表中选择要调试的进程名称并附加,VS 即进入调试状态;将 Linux 程序对应的源码在 VS 中打开,并设置断点,然后就可以开始调试了,如下图所示

在这里插入图片描述

当程序运行到断点处就会中断下来,等待用户下一步操作。

问题排查

连接类型没有 SSH

如果在【附加到进程】选项向导的连接类型中没有 SSH 选项,则可能没有安装调试 Linux 应用程序的运行环境,打开 Visual Studio 安装程序,勾选如下图所示的工具集,并执行安装

在这里插入图片描述

无法访问远程服务

如果输入 Linux 系统的 IP 地址后,没有跳出【连接到远程系统】向导,那么在【工具】视图下打开【选项】向导,在【跨平台】选项页中添加连接,如果提示如下图所示

在这里插入图片描述

那么该问题是 Visual Studio 产品的一个 Bug:https://developercommunity.visualstudio.com/t/Connection-Manager-Error-The-remote-ser/1499473,可以使用 Visual Studio 的其它版本来解决该问题。

连接远程系统超时

如果在用 SSH 远程连接 Linux 系统时提示连接超时,如下图所示

在这里插入图片描述

在确保两台机器的 IP 地址正常(能够 ping 通),并且端口没有被防火墙阻止后,可能的原因是在登录时,SSH 服务端会对客户端的 IP 做反向解析,此时连接不到 DNS 就出现了延时。解决办法是,打开 /etc/ssh/sshd_config,修改(如果没有就新增一行)

UseDNS no

无法连接到GDB

在附加进程启动调试时,如果提示无法连接到 GDB,如下图所示

在这里插入图片描述

此时检查 Linux 主机是否安装 GDB,执行如下命令进行安装

$ sudo apt-get install gdb

无法命中断点

进入调试状态后,如果无法命中断点,则可能的原因如下

  • Linux 程序使用 gcc/g++ 编译/链接时,没有使用 -g 选项。
  • 断点所在的源码文件不属于当前附加的进程,其被编译到其它进程中。
  • 远程连接时的用户权限不足,无法访问指定文件。
  • 代码在实时内核中运行(该部分暂未找到解决办法)。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值