DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

本文是介绍通过clion进行本地windows对远程Linux的程序进程调试

必要条件:
Linux环境上有安装cmake、 make、 g++、 gdb、 gdbserver

本文调试的代码

#include <iostream>
using namespace std;

int add(int a, int b)
{
    int sum = a + b;
    return sum;
}

int main() {
    std::cout << "Hello, World!" << std::endl;
    int sum = 0;
    sum = add(5, 3);
    std:cout << "sum of 5 and 3 is " << sum << std::endl;

    return 0;
}

 

CMakeLists.txt

cmake_minimum_required(VERSION 3.15)
project(project)

set(CMAKE_CXX_STANDARD 11)

add_executable(project main.cpp)

 

步骤一:代码同步
该步骤是用来配置本地clion的代码与远程对应代码目录自动同步用。如果是通过winscp、filezilla等工具手动上传代码,该步骤可以省略。
①配置Linux的环境信息,以及本地代码目录和远程代码目录的映射关系
Tools -> Deployment -> Configuration -> 新增一个SFTP配置
在这里插入图片描述
在这里插入图片描述
②SFTP配置好后,就可以通过右键目录上传更新本地到远程
在这里插入图片描述
为了不用每次修改完代码后手动提交到远程,可以设置自动提交
Tools -> Deployment ->Automatic Upload
在这里插入图片描述
步骤二:远程调试
①先将上传到Linux环境上的代码编译出可执行文件
cd /home/feiyang/code/project
mkdir build
cd build
cmake … -DCMAKE_BUILD_TYPE=Debug
make
②将编译出的可执行程序下载到本地,后面设置Symbol file的时候用,我放在D:\testCode\project\ 目录
③远程调试配置 新增一个 GDB Remote Debug在这里插入图片描述
在这里插入图片描述
‘target remote’ args 固定格式:tcp:ip地址:端口 端口可以自行设置
Symbol file 这是填入步骤②下载下来的可执行程序,如果这个符号路径没有填写准确,一启动调试,Linux上用gdbserver监听的程序就会直接运行结束,clion中断点不生效
Sysroot 可以不设置,设置为/时,clion就不会自动从目标环境中拷贝库文件

④在远程机器上启动gdbserver监听应用程序,命令如下:
gdbserver :1234 /home/feiyang/code/project/build/main

clion中对代码打上断点,点击Debug开始调试
在这里插入图片描述
对于正在运行中的程序可以用attch监听再调试 gdbserver --attach :1234 pid

另外:
对于应用程序依赖很多自己写的动态库的调试需要增加配置
①Sysroot配置为 /
②将生成的库文件放到本地如:D:\testCode\libs;然后在C:\Users\Admin 文件夹下新增.gdbinit文件,内容是: set solib-search-path D:\testCode\libs
同时设置windows的用户环境变量 HOME = C:\Users\Admin

 
posted on   DoubleLi  阅读(1419)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2014-06-06 TCP_NODELAY详解
2014-06-06 ntohs, ntohl, htons,htonl的比较和详解
2014-06-06 C++ 嵌套类使用(三)
2014-06-06 C++ 嵌套类使用(二)
2014-06-06 C++ 嵌套类使用(一)
2012-06-06 关于C++中函数指针的使用
点击右上角即可分享
微信分享提示