远程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
开始调试
- 启动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技术站