远程debug调试入门

yizhihongxing

远程debug调试是一个非常常见的问题,下面我会详细讲解其入门攻略,如果有不明白的地方,可以随时提出来。

远程debug的基本理念

远程debug调试,即在一台机器上编写和运行代码,在另一台机器上通过某种方式进行调试。这种调试方式非常适合大型项目,因为在大型项目中,我们并不能将整个工程都copy到本地进行调试。

远程debug的基本思想是:将编译好的程序复制到远程的运行环境中,然后使用本地的调试工具控制远程环境中的程序行为。按照这个思想,我们的远程debug调试流程就可以分为两个部分:

1.在远程环境中编译生成可执行文件:这需要在远程环境中安装编译器和必要的开发工具,将代码编译为可执行的二进制文件。

2.使用本地的调试环境设计远程程序的行为:这需要在本地运行调试工具,通过相应的设置和程序交互,实现对远程程序的监控和调试。

远程调试的实现方式

不同语言和工具支持的远程调试方式可能会有所不同,下面我列出几个常见的远程调试方式:

1.使用gdb进行远程调试:gdb是Linux下非常著名的调试工具,使用gdb进行调试的好处是,gdb允许我们在使用gdbserver的情况下,通过TCP/IP协议连接到远程计算机并进行调试。

2.使用clion进行远程调试:clion是一款非常好用的集成开发环境,它提供完整的调试工具以及支持远程开发和调试,对于远程开发和调试的流程非常友好。

3.使用IntelliJ idea进行远程调试:IntelliJ idea是一款非常强大的Java开发工具,它也支持Java远程调试并且对于Java应用程序的调试非常流畅。

下面,我将分别介绍使用gdb、clion和IntelliJ idea进行远程调试的流程。

使用gdb进行远程调试

环境准备

在进行远程调试前,需要在远程机器上安装gdb和gdbserver,这里以CentOS系统为例,执行以下命令安装:

yum install gdb gdbserver

开始调试

  1. 启动gdbserver

在远程机上,在你想调试的程序目录下,执行命令:

gdbserver host_address:port ./program_name

其中:

  • host_address:本地机器的IP地址或者hostname
  • port:用于和gdb客户端连接的端口号
  • ./program_name:要调试的程序

2.连接到远程gdb

在本地机上,使用gdb连接到远程gdbserver。

gdb program_name 
target remote host_address:port

其中:

  • program_name:要调试的程序
  • host_address:远程机器的IP地址或者hostname
  • port:gdbserver使用的端口号

  • 进行debug操作

使用本地的gdb客户端进行调试即可,命令和本地调试一致。

示例

例如我们要调试一个C++程序 prog,以下为远程 debug 过程:

在远程机器上运行 gdbserver:

suliu@localhost:~/lab/remote-debug$ gdbserver :2333 ./prog 
Process ./prog created; pid = 6126
Listening on port 2333

在本地机器上连接到远程 gdbserver:

suliu@localhost:~/lab/remote-debug$ gdb prog 
GNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git
......
Reading symbols from prog...done.
(gdb) set target-async 1
(gdb) target remote 10.0.0.7:2333
Remote debugging using 10.0.0.7:2333
Reading symbols from remote target...
0x00007ffff7dc4658 in ?? () from /lib64/ld-linux-x86-64.so.2

使用CLion进行远程调试

环境准备

在进行远程调试前,需要在远程机器上安装好编译工具,并且配置好SSH服务,可以使用工具如SSH, PuTTY等,这里以CentOS系统为例,执行以下命令安装SSH服务:

yum install openssh-server

开始调试

1.在CLion中配置SSH

在CLion中,打开File -> Settings -> Build, Execution, Deployment -> Deployment,配置SSH服务器的连接方式和登录方式。

2.在CLion中创建远程的工具链

在CLion中打开File -> Settings -> Build, Execution, Deployment -> Toolchains,点击 "+" -> Remote Host -> SSH Credentials,配置远程主机的SSH连接信息。

3.在CLion中创建远程的C++项目

在CLion中,打开File -> New Project,选择Remote Host,输入工程的名称、选择刚刚配置的远程的工具链,CLion 便会自动为你创建一个在远程服务器上开发的C++项目。

4.在CLion中进行远程调试

打开要调试的C++文件,设置断点,点击左侧 tab 运行 -> Edit Configurations,添加一个新的 Remote 运行配置,选择服务器类型SSH,然后输入服务器地址和启动命令信息并确定。选择这个配置,点击 Run 把程序上传到远程后开始运行调试。

示例

下面是一个简单的示例,我们创建了一个新的CLion项目,并且配置好了连接SSH的信息。在Project中建立一个hello world 的cpp文件,然后设置一个断点。

在左侧的运行窗格中点击 Edit Configurations 按钮并进行如下配置:

  • 设置程序运行远程服务器的 SSH 连接信息,在 Deployment 中选择 Upload to server,并选择服务器作为目标,通过勾选和输入密码信息,完成远程主机信息的添加;
  • 点击「Run Configuration」栏中的「Add Configuration」,设置运行参数,包括调试程序的工作目录、调试程序的绝对路径、连接远程端口号等;
  • 设置好配置后,点击 OK 按钮,进行 Debug 操作。

使用IntelliJ idea进行远程调试

IntelliJ IDEA 智能地提供了调试功能,支持 Java 应用程序的远程调试,用户可以像本地调试一样,在在 Java 应用程序的源码中插入断点并调试。其远程调试的配置大致流程和 Clion 配置方法基本相同,因此这里略过。

总结

以上为远程debug调试的基本理念和实现方式,它可以大大提高远程开发的效率。在实际使用中,我们可以根据实际需要选择适合的debug工具和方式,例如,对于Python开发,可以使用Pycharm等工具,进行远程调试。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:远程debug调试入门 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • JAVA 18位身份证号码校验码的算法

    我将为你详细讲解“JAVA 18位身份证号码校验码的算法”的完整攻略。 什么是身份证号码校验码 身份证号码由17位数字和1位校验码组成(18位)。其中,前17位为身份证号码,最后一位为校验码。校验码一般都是用来检验身份证号码的正确性,通过校验码可以判断一个身份证号码是否是正确的身份证号码。 JAVA 18位身份证号码校验码算法 校验码的计算规则如下: 将前1…

    Java 2023年6月15日
    00
  • 【Java】BigDecimal实现加减乘除运算代码

    Java BigDecimal实现加减乘除运算代码 Java中原生数据类型double和float的计算结果不一定准确,在金额等精度要求高的场景下,需要使用BigDecimal类进行运算。 BigDecimal概述 BigDecimal类是一个任意精度的,有符号十进制数的不可变对象,它提供了精确的数值运算。它比基本数据类型double和float更准确。在商…

    Java 2023年5月23日
    00
  • Java SpringSecurity+JWT实现登录认证

    一、什么是Java Spring Security和JWT? Java SpringSecurity是Spring框架中的一个安全工具,能够提供身份验证、授权、防止csrf攻击等功能; JWT(JSON Web Token)是一种用于身份验证的开放标准(RFC 7519),它使用JSON格式在网络之间安全地传递信息。JWT具有轻量级、开放性、易于使用和便于传…

    Java 2023年5月20日
    00
  • SpringBoot整合阿里 Druid 数据源的实例详解

    下面是Spring Boot整合阿里Druid数据源的实例详解。 一、什么是阿里Druid 概述:Druid是一个高性能的开源数据库连接池组件,由阿里巴巴开发。Druid提供了强大的监控和扩展功能,可以很好地和其他框架集成,如Spring框架、Hibernate框架等。 Druid主要功能: 数据库连接池 监控统计 数据库访问 数据源管理 二、通过Sprin…

    Java 2023年6月3日
    00
  • 详解Struts2中Action访问Servlet API的几种方法

    详解Struts2中Action访问Servlet API的几种方法 在Struts2框架中,我们可以通过在Action类中访问Servlet API来实现一些特殊操作。本文将详细介绍Struts2中Action访问Servlet API的几种方法。 方法一:继承ServletActionContext类 我们可以继承Struts2中的ServletActi…

    Java 2023年6月15日
    00
  • 详解Java编程中包package的内容与包对象的规范

    Java编程中的包(package)是为了更好地组织类而产生的概念,它可以将同一类别或功能的类文件存放在同一包目录下,使用时只需要import相应包的类即可。在Java编程中,包的定义需要遵循一定的规范。 包的定义规范 定义包名时,使用小写字母(包名不要与类名相同); 将包的名字写在Java源文件的顶部; 多个单词组成包名时,使用”.”分割,例如com.co…

    Java 2023年5月26日
    00
  • Java实现简单的万年历

    下面就是讲解实现Java简单的万年历的攻略及示例说明: 1. 确定需求和功能 在实现Java简单的万年历之前,我们需要定义该项目的需求和功能,以便能够更好地进行程序设计和编写。以下是常见的需求和功能: 能够查询指定日期的日历; 能够查询制定月份和年份的日历; 能够查询当前日期的日历; 能够显示节假日和纪念日等特殊日期。 2. 时间库的选择 为了实现Java简…

    Java 2023年5月19日
    00
  • 详解IDEA使用Maven项目不能加入本地Jar包的解决方法

    下面是详解“详解IDEA使用Maven项目不能加入本地Jar包的解决方法”的完整攻略。 症状 在使用IDEA进行Maven项目开发时,可能会出现无法加入本地Jar包的情况,表现为项目运行时无法找到相应的类或方法。 原因 主要原因是Maven的本地仓库只能管理已经通过Maven构建过的代码库,而Maven不能直接管理本地Jar包。因此,如果想要使用本地Jar包…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部