最新资讯

  • Linux《基础开发工具(下)》

Linux《基础开发工具(下)》

2025-04-27 03:00:34 0 阅读

在之前的Linux《基础开发工具》上和中当中我们已经了解了一些的Linux当中的基础开发工具,接下来在本篇当中我们将继续来了解两个基本的开发工具git和gbd,信息通过本篇的学习让你了解和这两个工具的基本使用方法,接下来就开始本篇的学习吧!!!


1.版本控制器Git

 1.1 版本控制器的作用

在之前你大概率有过这样的经历:在编写各种文档时,为了防止文档丢失,更改失误,失误后能恢复到原来的版本,不得不复制出一个副本,比如:
“报告-v1”
“报告-v2”
“报告-v3”
“报告-确定版”
“报告-最终版”
“报告-究极进化版”
...
每个版本有各自的内容,但最终会只有⼀份报告需要被我们使用。

每个版本有各自的内容,但最终会只有⼀份报告需要被我们使用 。
但在此之前的工作都需要这些不同版本的报告,于是每次都是复制粘贴副本,产出的文件就越来越
多,文件多不是问题,问题是:随着版本数量的不断增多,你还记得这些版本各自都是修改了什么
吗?
文档如此,我们写的项目代码,也是存在这个问题的!!

为了能够更方便我们管理这些不同版本的文件,便有了版本控制器所谓的版本控制器,就是能让你了解到⼀个文件的历史,以及它的发展过程的系统。通俗的讲就是⼀个可以记录工程的每⼀次改动和版本迭代的⼀个管理系统,同时也方便多人协同作业。

一开始的版本管理器是将对应的历史创建的各个版本的软件或者报告等存储在本地当中,但是这种方式就无法实现多人开发的进行,每个开发者都只能在自己的本地当中进行版本的控制,因此在此之后就诞生了在远端的服务器当中进行版本的控制,这样就可以使得各个开发者都可以将开发过程中项目的各个版本同步到服务器上,这就解决了开发者之间无法实现协同开发的问题。

在此所有开发者只需要将在本地的仓库同步到远端的仓库就可以在远端的仓库当中存储所有的版本信息

现在主流的版本控制器就是git,我们使用的gitee、github等都是基于git的网站或者平台

Git 可以控制电脑上所有格式的⽂件,例如 doc、excel、dwg、
dgn、rvt等等。对于我们开发⼈员来说,Git 最重要的就是可以帮助我们管理软件开发项目中的源代码文件!有了git我们就不再害怕在本地的电脑出现问题时会造成代码丢失的问题,在此我们只需要在进行开发时将代码同步到远端的gitee或者githu上就可以在本地的代码丢失时将远端的数据拉到本地即可。

1.2 git简史

在了解git之前我们要先来了解git大概的的发展历史,这有助于我们更好的了解git

首先要了解的是git也是与Linux一样也是开源的。

在Linux诞生之后由于Linux的作者托瓦兹将Linux开源之后,世界各地的参与Linux项目的人越来越多了,在此过程当中托瓦兹需要将世界上的工程师提交的代码进行审核,若对应的代码符合要求就将其上线到Linux当中,但是由于参与Linux项目的人太多了,提交的代码也越来越多,托瓦兹一个人已经无法将所有的代码进行审核。此时托瓦兹就想能不能使用一个软件将所有提交的代码进行管理,之后再将这些代码让Linux的开发工程师进行审核等操作。在此托瓦兹找寻找程过程中寻找的是免费的版本控制器,这是因为托瓦兹认为Linux是开源的但如果版本控制器是收费的这就和Linux的开源精神相违背了。之后托瓦兹发现进行版本控制的的软件都是收费的,之后一家公司看到Linux开发者无私的精神愿意将自己的版本控制器免费给Linux社区使用,但是在社区使用这款版本控制器的过程中出现了有些人将该软件破解了,之后该版本控制器的公司就不再将该版本控制器免费提供给Linux社区了。

之后托瓦兹在无法得到使用市面上免费的版本控制器之后就自己写了一个开源的版本控制器,这就是以上提到的git

1.3 gitee使用

以上我们初步了解了git的使用以及git的由来,那么接下来我们就来了解一个基于git的网站gitee如何进行使用

Gitee - 基于 Git 的代码托管和研发协作平台

在此点击以上的链接就可以打开gitee的官网,接下来会讲解如何在gitee下创建远程的仓库,之后如何将本地的仓库同步到远端的仓库当中

当你创建了账户之后接下来在你的gitee主页当中就可以看到右上角有一个+,点击之后再点击创建仓库

 之后就可以在gitee当中进行仓库的创建了,在此仓库的命名由你决定,一般我们会将仓库内存储的数据最主要的特点作为仓库名,之后选择开源还是闭源;开源就是其他人都可以查看你gitee该仓库内的数据,闭源就是仓库内的数据只有你或者指定的人才能查看。

在初始化仓库当中,将语言选择C++,添加.gitignore为C++

注:.gitignore的作用在之后会进行讲解

在选择分支模型当中我们选择单分支即可,在一些大的公司当中需要进行多人协作的开发就可能会使用到其他的生成/开发模型等

创建仓库完成之后就会出现以下的页面,接下来点击其中的克隆/下载

之后对应的复制对应的HTTPS即可 

1.4 Linux内git操作 

在以上我们了解了如何在gitee当中创建仓库,那么接下来就接着来学习如何在Linux当中使用git将对应的代码拉到远程仓库当中

在Linux当中使用git之前需要先在Linux当中使用yum下载git

sudo yum install git

在使用了以上的命令在Linux当中下载了git之后接下来就可以使用git clone来将以上我们在gitee当中创建的远程仓库同步到本地的Linux当中

git clone [HTTPS地址]

使用了以上的指令之后接下来就可以在当前的目录下看到创建了一个和我们之前创建的仓库同名的目录

进入到该目录之后就可以看到已经将远程仓库当中的数据同步到Linux当中 

了解了远端的仓库如何拉到Linux当中之后接下来来了解如何将Linux当中的文件代码传输到远端的仓库当中

在进行传输只需要进行三步即可实现,分别是add、commit、push

首先在当前的linux目录下创建一个名为test.c的文件,之后在该文件内写入以下的内容

在此要进行传输时首先使用add来实现将对应的文件传输到本地的缓冲区当中

在此要查询对应的文件是否进入到缓冲区当中就需要使用git status

git status

以上我们使用了add指令之后其实对应的文件只是被拷贝到缓冲区当中,此时还未被拷贝到本地的git仓库当中

在此可以使用ls -a看到在当中路径下存在一个名为 .git 的隐藏文件,并且在该目录当中还没有我们创建的test.c的文件

要使得在缓冲区当中的文件拷贝到本地的git仓库当中接下来再使用git commit 就可实现

git commit -m "XXX"

在使用git commit要带上-m选项并且在此之后还要在之后再使用引号写上该文件的简介

完成了以上的操作之后接下来再使用push就可以将本地当前git仓库内的文件同步到远端的仓库当中

git push

接下来在使用该指令之后只需要输入你的gitee的用户名以及gitee账号的密码即可实现文件的传输

此时在gitee就可以看到test.c已经同步到远端的仓库当中

以上我们就了解了在Linux当中如何使用git来将文件同步到远端的仓库当中,那么接下来了解之前提到的.gitignore文件的作用

首先先在当中的目录下一个  test.o的文件,之后再按照以上的add、commit、push三步来实现远端的同步

在以上的操作过程当中就可以看出在使用add时就会没有对应的文件没有将对应的文件传输到缓冲区当中,此时通过该示例就可以了解到.gitignore的作用就是在进行git操作时进行特点文件的忽略,在.gitignore内保存的就是要进行忽略文件的后缀

在一般情况下我们除了在Linux当中进行文件远端的同步外还会进行Linux与Windows的协同开发,那么首先就要了解如何在Windows下将远端的仓库同步到本地。在此确实可以和之前Linux一样使用命令行进行操作,但是在Windows还有更好地方式进行传输,同步等操作,但是使用小乌龟会更加地简便。

详细教程可以观看以下地视频: 

gitee(码云)的注册和代码提交【手把手】_哔哩哔哩_bilibili

在此在Windows当中点击pull就可以将远端地仓库同步到本地

接下来在Windows当中将之前我们在Linux当中创建地test.c文件进行修改再加上一行代码

之后进行add、commit、push同步到远端

 接下来在Linux当中继续使用创建另外地文件同步到远端

但是此时在使用push就会出现以下地错误

那么此时地问题是什么呢?

其实问题很简单之前在Windows端我们将原来地test.c文件进行了修改,而此时Linux端还是保存的是之前未修改文件的数据,这是就会形成远端仓库和Linux本地仓库的人冲突,此时的冲突就是提醒用户要和远端进行同步了,在此就需要使用 pull来将远端的仓库同步到本地

git pull

以上就是关于git基本的使用,更多的git操作将在之后的git专栏当中进行讲解

2.gdb

通过之前的学习我们知道软件发布的模式有两种分别是debug模式和release模式,一般我们在开发时的模式是debug模式,而最终发布的模式是release模式。

之前在windows当中默认在进行代码的编写时的模式就是debug模式,但是在之前我们在Linnux当中使用vim等编辑器编写完代码之后接下来使用gcc/g++编译默认生成的是release模式下的程序。

我们知道在release模式下是无法进行调试工作的,那么接下来我们就要来学习如何在Linux当中将可执行程序形成为debug模式。

在Linux当中要进行调试就需要使用到gdb,同时还必须在源代码生成二进制程序的时候, 加上 -g 选项,如果没有添加,程序无法被编译。

那么接下来我们实现了进度条项目的代码,此时如果我们要进行调试就需要将之前实现makefile内的依赖方法进行修改;加上-g选项

接下来使用make命令之后就会发现形成的可执行程序相比之前的要大了一些,在此我们还可以通过以下的readelf指令进一步验证

此时就可以看到在形成的可执行程序process.exe内包含了对应调试信息

因此总的来说-g选项的作用就是让最后形成的可执行程序添加调试信息,也就是改为debug模式。

接下来我们来基于以下的代码来学习gdb内相关的指令

#include 

int Sum(int s, int e)
{
    int result = 0;
    for(int i = s; i <= e; i++)
    {
        result += i;
    }
    return result*flag;
}

int main()
{
    int start = 1;
    int end = 100;
    printf("I will begin
");
    int n = Sum(start, end);
    printf("running done, result is: [%d-%d]=%d
", start, end, n);
   return 0;
}

以上的代码很好理解,其实现的功能就是计算出1到100之间的全部整数之和,接下来我们就依据以上的代码来了解如何使用gdb来进行调试

实现在当前路径下创建对应的makefile文件,内部内容如下所示:

创建的makefile之后接下来使用make命令创建出了对应的mytest可执行程序后再使用gdb mytest指令就会出现以下的信息,此时就表明我们进入到gdb当中了

接下来要查看可执行程序内的代码就需要使用list指令,在此直接使用l也是可以的

以上我们就可以看到可执行程序内的代码了,但是这样在gdb内进行调试是在黑屏下进行的,还是比较难操作的,因此在此推荐的是使用cgdb来进行调试,在Linux当中使用cgdb要先下载cgdb

sudo sudo yum install -y cgdb

有了cgdb之后我们再来对之前的mytest进行调试,使用对应的指令 cgdb mytest,之后就会进入到cgdb当中

此时进行调试时程序的代码在上方,调试的信息在下方,相比之前的gdb现在的cgdb就更加显著了。

在此要显示出代码使用的还是list

list/l显示源代码,从上次位置开始,每次列出
10行
list/l 函数名列出指定函数的源代码
list/l ⽂件名:行号列出指定文件的源代码

要运行以上的程序就需要使用到run,可以直接使用r在没有设置断点时使用之后就会直接将该程序跑完。

如果要设置断点就需要使用到b在此b的使用有以下的形式

b [文件件名:]行号在指定行号设置断点
b 函数名在函数开头设置断点
b 行号在指定行号设置断点

 

那么再设置了断点之后要查看所有的断点呢?那么此时就需要使用到info

info b查看当前所有断点的信息

只需要使用info b指令就可以查看当前设置的所有断点的信息

在此以上就是使用info b之后显示的结果,在此Num表示的断点编号 。

那么要将创建的断点进行删除又要怎么操作呢?在此就需要使用到d,在此要删除对应的断点不能使用行号来进行删除,而是需要使用对应的断点编号来删除

d n删除序号为n的断点

以上我们将断点1删除之后再在19行创建断点就会发现断点编号变为2了,这是因为在gdb当中不退出断点编号会依次递增

在之前VS当中当我们设置了断点之后接下来F5程序就会跑到断点处就停止,接下来我们就可以使用F10或者F11,F10为逐过程,F11为逐语句。在gdb当中也是可以进行这两个操作的。需要使用到以下的指令。

n/next单步执行,不进入函数内部
s/step单步执行,进入函数内部

以上我们在程序的19行打了断点,接下来使用r就跑到19行时就停止了,接下来要进入到函数内就使用s ,要直接执行Sum函数就使用n。

通过以上就可以看出当gdb是会自动记录最新的一条指令,这样在使用s/n时就不需要一直输入再点击回车,只需要第一次输入之后接下来点击回车即可。

并且当要结束这一次的调试时只需要输入r再输入y就可以重新开始调试

在调试当中当我们进入到函数当中时要结束该函数的调试,直接运行到函数的返回处就需要使用到以下的指令

finish执行到当前函数返回,然后停止

例如以上的程序当中,当我们使用s进入到Sum函数之后接下来如果要快速的使得该函数运行完就可以使用finish来实现,此时就会运行到程序的19行结束 

在调试过程当中要查看指定变量的值就需要使用到以下的指令

p 变量打印指定变量的值

例如在以上我们在调试当中运行完Sum函数之后,此时查看变量n的值就会发现此时的值是随机值,这是因为当前还未将Sum的返回值赋值给n 

只需要再执行一条语句再查看n的值就变为了5050

在gdb当中如果当前有多个断点但是有的断点我们现在不想使用,但是又不想删除此时就需要使用到以下的指令,在此该指令就能实现断点使能

disable 断点编号禁用对应编号的断点

例如在以上的程序当中我们使用q退出cgdb之后重新进入再在16行创建一个断点

此时就可以看到创建断点时默认的Enb是y的,也就是创建断点之后默认是开启的,那么接下来将断点1 使用disable之后再进行r之后就会使得程序运行到断点2处停止

 

那么要将被禁用的断点再重新开启要怎么操作呢?在此就要使用到以下的指令

enable 断点编号启用对应编号的断点

 

以上我们就了解了基本的调试当中的基本操作,接下来我们就要思考调试的本质是什么?

通过之前的经验我们知道,在进行调试时一般是我们写的代码出现了问题,那么接下来就进行调试来找出问题,此时打不同的断点其实就是将代码进行块级别的划分,这样就可以以块单位进行快速的定位出现问题的区域。

那么如果当程序运行起来之后要从一个断点跳转至下一个断点,那么就要使用到以下的指令

continue/c从当前位置开始连续执行程序

 

之前我们了解的finish指令其实作用是确认问题是否出现在对应的函数内部,那么如果在进入函数之后要在函数内部进行局部区域的快速查找呢?

要进行以上的操作就需要使用到以上下的指令

until X行号执⾏到指定行号

例如以下进入到Sum函数内部之后当前在循环内部时要快速的跳出循环就可以使用until 

 

 

那么使用断点以及finish和until指令就可以实现找出问题,那么接下来找出问题之后就要查看出现问题的上下文代码来找出问题出现的位置

假设将以上的代码修改为以下的形式,在此将Sum函数的返回值乘flag变量,但是flag的值为0,这就会使得最后返回的结果为0,那么接下来假设我们不知道该问题,接下来就要通过调试来找出问题

#include 

int Sum(int s, int e)
{
    int result = 0;
    for(int i = s; i <= e; i++)
    {
        result += i;
    }
    return result*flag;
}

int main()
{
    int start = 1;
    int end = 100;
    printf("I will begin
");
    int n = Sum(start, end);
    printf("running done, result is: [%d-%d]=%d
", start, end, n);
   return 0;
}

当我们进行调试时进入到Sum函数内部之后,接下来在使用s时我们就需要查看函数内变量的值变化,但是这是使用p指令就不太方便 ,因此接下来就要再来了解一个指令

display 变量名跟踪显示指定变量的值(每次停止时)

以上使用diaplay之后就可以在使用s的同时显示变量的值 

在此要取消对应变量的显示就可以使用以下的指令

 

undisplay 编号取消对指定编号的变量的跟踪显示

注意:在此使用undisplay之后跟的是编号而不是变量的名称 

我们之前已经了解过了p指令的使用方法,在此对p指令再进行使用的补充,p之后可以跟表达式,使用之后就会输出该表达式的结果

例如以上的代码当中当我们调试到代码的11行时,也就是Sum函数的结尾时就可以发现此时的result还是我们预期的5050,那么此时就可以使用flag*result的表达式来将函数的返回值提前得到,这样就可以判断出是flag出现问题。

 

gdb几个使用技巧

了解以上的指令我们就可以正常的使用gdb了,接下来再来了解几个加餐的指令来提高我们代码调试的效率

1.watch

一般在程序当中会有一些变量,那么这变量的值在程序执行的过程当中是不能出现改变的,那么此时就可以使用watch来监视这些量,只有在变量的值出现变化时才会显示

例如在以上的代码当中如果我们使用watch监视resutl,那么就会出现以下的结果

注:如果你有⼀些变量不应该修改,但是你怀疑它修改导致了问题,你可以watch它,如果变化了,就会通知你

2. set var

在之前使用调试的时候当出现问题之后要进行修改都是要先退出调试,之后再进行一次调试来验证修改之后的代码是否符合我们的要求。这就比较繁琐,那么有什么方法可以在调试期间就进行验证的方法呢?

其实是有的,这就是阶而下了我们要学习的set var

例如在以上的代码当中我们就可以使用set var来验证判断是flag出现问题之后再修改flag的值能否让程序正常的运行

3. 条件断点

如果我们想创建一个断点使得程序在满足对应的条件时停止,在gdb当中要如何操作呢?

其实在此是分为两种情况,第一种是当前要创建一个条件断点,那么和之前创建断点类似,只不过在创建之后再加上对应的条件即可

b 行号 if 条件

例如在以上的代码当中要让在第9行且i等于10时候停下就可以使用到条件断点

此外除了以上的情况外,我们还有可能会先创建了一个普通的断点之后要使其变为条件断点,那么这时就需要使用到如下指令

condition 断点编号 新增条件

例如假设我们在以上的代码当中在第9行创建一个普通的断点,那么此时要使得程序运行到i=10的时候停止就需要使用到condition 

 

4. gdb屏与代码屏切换

当我们要查看文件的代码时就可以点击ESC键,这时就可以进入到代码屏,接下来就可以使用上下键进行代码的翻阅

此时要从代码屏退回gdb屏只需要点击i键

以上就是本篇的全部内容了, 在此我们就了解完了Linux当中的所有基本的开发工具,那么接下来我们就将开始进程的学习,未完待续……

本文地址:https://www.vps345.com/2718.html

搜索文章

Tags

PV计算 带宽计算 流量带宽 服务器带宽 上行带宽 上行速率 什么是上行带宽? CC攻击 攻击怎么办 流量攻击 DDOS攻击 服务器被攻击怎么办 源IP 服务器 linux 运维 游戏 云计算 javascript 前端 chrome edge python MCP llama 算法 opencv 自然语言处理 神经网络 语言模型 ssh deepseek Ollama 模型联网 API CherryStudio 进程 操作系统 进程控制 Ubuntu harmonyos 华为 开发语言 typescript 计算机网络 ubuntu 数据库 centos oracle 关系型 安全 分布式 react.js 前端面试题 node.js 持续部署 Dell R750XS 科技 ai java 人工智能 个人开发 udp unity 网络 网络协议 rust http macos adb fastapi mcp mcp-proxy mcp-inspector fastapi-mcp agent sse pycharm ide pytorch numpy nginx 监控 自动化运维 阿里云 网络安全 django flask web3.py 笔记 C 环境变量 进程地址空间 github 创意 社区 flutter RTSP xop RTP RTSPServer 推流 视频 tcp/ip golang AI 爬虫 数据集 面试 性能优化 jdk intellij-idea 架构 oceanbase rc.local 开机自启 systemd 麒麟 ecm bpm 深度学习 机器学习 chatgpt 大模型 llama3 Chatglm 开源大模型 php android c# c++ 深度优先 图论 并集查找 换根法 树上倍增 ddos ollama llm zotero WebDAV 同步失败 代理模式 ansible playbook YOLO vue.js audio vue音乐播放器 vue播放音频文件 Audio音频播放器自定义样式 播放暂停进度条音量调节快进快退 自定义audio覆盖默认样式 java-ee bash sql KingBase 银河麒麟 kylin v10 麒麟 v10 Docker Compose docker compose docker-compose 目标检测 计算机视觉 conda spring spring boot 后端 tomcat postman mock mock server 模拟服务器 mock服务器 Postman内置变量 Postman随机数据 ESP32 LDAP websocket 自动化 maven intellij idea 腾讯云 nuxt3 vue3 docker 实时音视频 filezilla 无法连接服务器 连接被服务器拒绝 vsftpd 331/530 dubbo .netcore 运维开发 容器 .net ssl 统信 国产操作系统 虚拟机安装 openEuler gitlab 低代码 多线程服务器 Linux网络编程 android studio pillow live555 rtsp rtp json html5 firefox c语言 web安全 Kali Linux 黑客 渗透测试 信息收集 kubernetes 学习方法 经验分享 程序人生 Qwen2.5-coder 离线部署 vim vscode 代码调试 ipdb springsecurity6 oauth2 授权服务器 token sas DeepSeek-R1 API接口 Flask FastAPI Waitress Gunicorn uWSGI Uvicorn prometheus Hyper-V WinRM TrustedHosts kvm 无桌面 命令行 串口服务器 DigitalOcean GPU服务器购买 GPU服务器哪里有 GPU服务器 apache matlab YOLOv8 NPU Atlas800 A300I pro asi_bench mount挂载磁盘 wrong fs type LVM挂载磁盘 Centos7.9 蓝耘科技 元生代平台工作流 ComfyUI windows 搜索引擎 Deepseek 智能路由器 dell服务器 IIS .net core Hosting Bundle .NET Framework vs2022 rabbitmq es jvm html elasticsearch jenkins minio Spring Security microsoft redis 计算机 jupyter kylin Invalid Host allowedHosts vue 远程连接 rdp 实验 远程工作 fpga开发 负载均衡 mysql gitee Wi-Fi WebUI DeepSeek V3 DeepSeek AI大模型 交换机 硬件 设备 GPU PCI-Express minicom 串口调试工具 测试工具 GaN HEMT 氮化镓 单粒子烧毁 辐射损伤 辐照效应 矩阵 线性代数 电商平台 UOS 统信操作系统 yum SysBench 基准测试 qt 交叉编译 嵌入式 C++软件实战问题排查经验分享 0xfeeefeee 0xcdcdcdcd 动态库加载失败 程序启动失败 程序运行权限 标准用户权限与管理员权限 ISO镜像作为本地源 mybatis MacOS录屏软件 AIGC 云电竞 云电脑 todesk svn 学习 嵌入式硬件 职场和发展 MNN Qwen 备份SQL Server数据库 数据库备份 傲梅企业备份网络版 大数据 cursor 音乐服务器 Navidrome 音流 transformer 游戏服务器 Minecraft pip H3C ESXi Dell HPE 联想 浪潮 AI编程 CPU 内存 主板 电源 网卡 医疗APP开发 app开发 uni-app virtualenv arm debian pppoe radius arm开发 系统安全 媒体 微信 远程桌面 gaussdb ffmpeg 音视频 xss 宝塔面板访问不了 宝塔面板网站访问不了 宝塔面板怎么配置网站能访问 宝塔面板配置ip访问 宝塔面板配置域名访问教程 宝塔面板配置教程 kind 开源 华为云 物联网 react next.js 部署 部署next.js QQ 聊天室 spring cloud 单片机 温湿度数据上传到服务器 Arduino HTTP ocr 命令 AI agent 硬件架构 系统架构 思科模拟器 思科 Cisco 云服务 googlecloud eureka https muduo X11 Xming 小程序 其他 银河麒麟服务器操作系统 系统激活 git 弹性计算 虚拟化 KVM 计算虚拟化 弹性裸金属 c 博客 游戏程序 stm32 windwos防火墙 defender防火墙 win防火墙白名单 防火墙白名单效果 防火墙只允许指定应用上网 防火墙允许指定上网其它禁止 社交电子 安全威胁分析 安装教程 GPU环境配置 Ubuntu22 CUDA PyTorch Anaconda安装 vscode 1.86 远程登录 telnet 1024程序员节 重启 排查 系统重启 日志 原因 漏洞 信息与通信 ip k8s 智能手机 NAS Termux Samba Linux SSH 计算机外设 电脑 mac 软件需求 express p2p 云原生 5G 3GPP 卫星通信 hugo WSL2 Netty 即时通信 NIO SWAT 配置文件 服务管理 网络共享 监控k8s集群 集群内prometheus HTTP 服务器控制 ESP32 DeepSeek wsl2 wsl ruoyi 服务器繁忙 备选 网站 api 调用 示例 银河麒麟桌面操作系统 Kylin OS 国产化 DeepSeek行业应用 Heroku 网站部署 TRAE AutoDL IIS服务器 IIS性能 日志监控 selete 高级IO rpc vasp安装 边缘计算 智能硬件 Linux PID 华为od sqlite TCP服务器 qt项目 qt项目实战 qt教程 openssl 密码学 微信分享 鸿蒙 Image wxopensdk 模拟退火算法 ceph 田俊楠 国标28181 视频监控 监控接入 语音广播 流程 SIP SDP 编辑器 MQTT mosquitto 消息队列 r语言 数据挖掘 数据可视化 数据分析 word图片自动上传 word一键转存 复制word图片 复制word图文 复制word公式 粘贴word图文 粘贴word公式 程序员 ci/cd 机器人 数据库系统 EMQX 通信协议 kafka hibernate list 数据结构 kamailio sip VoIP 根服务器 clickhouse jar 宝塔面板 同步 备份 建站 excel laravel 大模型入门 大模型教程 webrtc remote-ssh sqlserver junit ukui 麒麟kylinos openeuler W5500 OLED u8g2 微服务 chfs ubuntu 16.04 框架搭建 unity3d springboot 火绒安全 云服务器 VPS Nuxt.js Xterminal 需求分析 规格说明书 豆瓣 追剧助手 迅雷 nas 微信小程序 前端框架 RTMP 应用层 反向代理 致远OA OA服务器 服务器磁盘扩容 okhttp CORS 跨域 JAVA Java 雨云 NPS 飞书 孤岛惊魂4 uniapp aws 恒源云 tcp HarmonyOS Next AD域 vSphere vCenter 软件定义数据中心 sddc 单一职责原则 3d 数学建模 服务器数据恢复 数据恢复 存储数据恢复 北亚数据恢复 oracle数据恢复 jmeter 软件测试 网络结构图 opcua opcda KEPServer安装 HCIE 数通 oneapi 大模型微调 open webui 7z 输入法 echarts YOLOv12 av1 电视盒子 机顶盒ROM 魔百盒刷机 传统数据库升级 银行 大语言模型 LLMs Dify 向日葵 asp.net大文件上传 asp.net大文件上传下载 asp.net大文件上传源码 ASP.NET断点续传 asp.net上传文件夹 asp.net上传大文件 .net core断点续传 远程 执行 sshpass 操作 华为认证 网络工程师 移动云 MS Materials gateway Clion Nova ResharperC++引擎 Centos7 远程开发 多进程 外网访问 内网穿透 端口映射 Headless Linux mongodb XCC Lenovo 安全架构 AISphereButler tcpdump shell embedding Windsurf visualstudio zookeeper SSL 域名 skynet WSL win11 无法解析服务器的名称或地址 Agent armbian u-boot LORA NLP Trae IDE AI 原生集成开发环境 Trae AI 企业微信 Linux24.04 deepin npm Cursor 驱动开发 硬件工程 嵌入式实习 RustDesk自建服务器 rustdesk服务器 docker rustdesk 黑客技术 报错 URL ftp web pyqt 微信小程序域名配置 微信小程序服务器域名 微信小程序合法域名 小程序配置业务域名 微信小程序需要域名吗 微信小程序添加域名 EasyConnect Cline LLM Web APP Streamlit pygame 小游戏 五子棋 hadoop big data opensearch helm 服务器主板 AI芯片 ssrf 失效的访问控制 HTML audio 控件组件 vue3 audio音乐播放器 Audio标签自定义样式默认 vue3播放音频文件音效音乐 自定义audio播放器样式 播放暂停调整声音大小下载文件 MI300x 交互 openwrt ux 多线程 vscode1.86 1.86版本 ssh远程连接 SSE zabbix open Euler dde 统信UOS Python 网络编程 聊天服务器 套接字 TCP 客户端 Socket asm xrdp 软件工程 unix string模拟实现 深拷贝 浅拷贝 经典的string类问题 三个swap TrinityCore 魔兽世界 开发环境 SSL证书 sysctl.conf vm.nr_hugepages adobe pdf 群晖 文件分享 中间件 iis VSCode odoo 服务器动作 Server action 雨云服务器 僵尸进程 FTP 服务器 崖山数据库 YashanDB 源码剖析 rtsp实现步骤 流媒体开发 Ubuntu 24.04.1 轻量级服务器 NFS redhat VMware安装Ubuntu Ubuntu安装k8s mysql离线安装 ubuntu22.04 mysql8.0 高效日志打印 串口通信日志 服务器日志 系统状态监控日志 异常记录日志 毕设 ollama下载加速 raid5数据恢复 磁盘阵列数据恢复 银河麒麟操作系统 远程过程调用 Windows环境 firewalld 直播推流 服务器部署ai模型 hive Hive环境搭建 hive3环境 Hive远程模式 rsyslog ipython 缓存 三级等保 服务器审计日志备份 FTP服务器 v10 镜像源 软件 微信公众平台 risc-v flash-attention C语言 软考 权限 流式接口 架构与原理 联想开天P90Z装win10 bootstrap ecmascript nextjs reactjs 压力测试 tailscale derp derper 中转 飞牛NAS 飞牛OS MacBook Pro 网工 camera Arduino 电子信息 Ubuntu Server Ubuntu 22.04.5 IDEA bonding 链路聚合 Reactor 设计模式 C++ idm 课程设计 MCP server C/S LLM windows日志 Unity Dedicated Server Host Client 无头主机 stm32项目 数据库架构 数据管理 数据治理 数据编织 数据虚拟化 iDRAC R720xd 命名管道 客户端与服务端通信 策略模式 单例模式 自动化测试 性能测试 功能测试 Linux awk awk函数 awk结构 awk内置变量 awk参数 awk脚本 awk详解 能力提升 面试宝典 技术 IT信息化 agi gpu算力 ios 磁盘监控 iot midjourney AI写作 前后端分离 netty go 服务器无法访问 ip地址无法访问 无法访问宝塔面板 宝塔面板打不开 XFS xfs文件系统损坏 I_O error 佛山戴尔服务器维修 佛山三水服务器维修 file server http server web server 集成学习 集成测试 服务器配置 生物信息学 mcu gitea FunASR ASR Docker Hub docker pull daemon.json SSH 服务 SSH Server OpenSSH Server 技术共享 我的世界 我的世界联机 数码 虚拟机 pyautogui 文件系统 路径解析 navicat 我的世界服务器搭建 加解密 Yakit yaklang 软链接 硬链接 无人机 ROS 自动驾驶 王者荣耀 干货分享 黑客工具 密码爆破 DNS 执法记录仪 智能安全帽 smarteye cnn DenseNet less 流量运营 CrewAI log4j 小智AI服务端 xiaozhi TTS onlyoffice 信号处理 AD 域管理 prompt elk eclipse mamba Vmamba bot Docker efficientVIT YOLOv8替换主干网络 TOLOv8 BMC IPMI 带外管理 ui Xinference RAGFlow GCC Linux环境 GoogLeNet CH340 串口驱动 CH341 uart 485 cd 目录切换 Erlang OTP gen_server 热代码交换 事务语义 RAGFLOW RAG 检索增强生成 文档解析 大模型垂直应用 图像处理 ubuntu24 vivado24 freebsd glibc 远程控制 rustdesk bcompare Beyond Compare 模拟器 教程 apt 国内源 llama.cpp dns是什么 如何设置电脑dns dns应该如何设置 在线预览 xlsx xls文件 在浏览器直接打开解析xls表格 前端实现vue3打开excel 文件地址url或接口文档流二进 tensorflow .net mvc断点续传 怎么卸载MySQL MySQL怎么卸载干净 MySQL卸载重新安装教程 MySQL5.7卸载 Linux卸载MySQL8.0 如何卸载MySQL教程 MySQL卸载与安装 AI作画 selenium xpath定位元素 Unity插件 k8s集群资源管理 云原生开发 iventoy VmWare OpenEuler Open WebUI 测试用例 剧本 烟花代码 烟花 元旦 强化学习 程序 linux安装配置 个人博客 xml kali 共享文件夹 lsb_release /etc/issue /proc/version uname -r 查看ubuntu版本 RoboVLM 通用机器人策略 VLA设计哲学 vlm fot robot 视觉语言动作模型 具身智能 Ark-TS语言 技能大赛 visual studio code 端口测试 ros2 moveit 机器人运动 EMUI 回退 降级 升级 Ubuntu 24 常用命令 Ubuntu 24 Ubuntu vi 异常处理 高效远程协作 TrustViewer体验 跨设备操作便利 智能远程控制 cmos 中兴光猫 换光猫 网络桥接 自己换光猫 linux环境变量 实习 rtsp服务器 rtsp server android rtsp服务 安卓rtsp服务器 移动端rtsp服务 大牛直播SDK ArkUI 多端开发 智慧分发 应用生态 鸿蒙OS 大模型面经 大模型学习 edge浏览器 n8n dity make 安卓 工业4.0 springcloud 鸿蒙系统 阻塞队列 生产者消费者模型 服务器崩坏原因 网站搭建 serv00 jetty undertow 灵办AI ros Linux无人智慧超市 LInux多线程服务器 QT项目 LInux项目 单片机项目 链表 grafana 微信开放平台 微信公众号配置 rime 游戏开发 SEO hexo Jellyfin VMware安装mocOS VMware macOS系统安装 流水线 脚本式流水线 显示管理器 lightdm gdm 单元测试 devops 游戏引擎 抗锯齿 gcc 元服务 应用上架 图形化界面 换源 Debian firewall 超融合 裸金属服务器 弹性裸金属服务器 金仓数据库 2025 征文 数据库平替用金仓 gpt crosstool-ng 游戏机 鲲鹏 昇腾 npu nac 802.1 portal trae 毕昇JDK 语音识别 半虚拟化 硬件虚拟化 Hypervisor 多层架构 解耦 LInux micropython esp32 mqtt 智能音箱 智能家居 deekseek ragflow 知识库 docker run 数据卷挂载 交互模式 查询数据库服务IP地址 SQL Server 分析解读 proxy模式 postgresql pgpool 本地知识库部署 DeepSeek R1 模型 业界资讯 虚拟局域网 网络攻击模型 code-server SVN Server tortoise svn dba 算力 政务 分布式系统 监控运维 Prometheus Grafana Python基础 Python教程 Python技巧 Radius HAProxy dify 深度求索 私域 gpt-3 文心一言 环境配置 ABAP IM即时通讯 剪切板对通 HTML FORMAT Claude 银河麒麟高级服务器 外接硬盘 Kylin 信号 物联网开发 eNSP 网络规划 VLAN 企业网络 显卡驱动 AnythingLLM AnythingLLM安装 outlook Kali 蓝桥杯 腾讯云大模型知识引擎 小艺 Pura X k8s资源监控 annotations自动化 自动化监控 监控service 监控jvm 做raid 装系统 实战案例 Java Applet URL操作 服务器建立 Socket编程 网络文件读取 序列化反序列化 双系统 直流充电桩 充电桩 主从复制 rust腐蚀 阿里云ECS MacMini Mac 迷你主机 mini Apple 网络用户购物行为分析可视化平台 大数据毕业设计 宠物 毕业设计 免费学习 宠物领养 宠物平台 网络穿透 can 线程池 HarmonyOS ruby bug 虚幻 线程 ssh远程登录 P2P HDLC VR手套 数据手套 动捕手套 动捕数据手套 OD机试真题 华为OD机试真题 服务器能耗统计 css linux上传下载 QT 5.12.12 QT开发环境 Ubuntu18.04 健康医疗 互联网医院 GRUB引导 Linux技巧 dns docker搭建nacos详解 docker部署nacos docker安装nacos 腾讯云搭建nacos centos7搭建nacos DevEco Studio springboot远程调试 java项目远程debug docker远程debug java项目远程调试 springboot远程 USB网络共享 Google pay Apple pay autodl 程序员创富 Playwright 编程 vmware 卡死 RAID RAID技术 磁盘 存储 uv rclone AList webdav fnOS 浏览器开发 AI浏览器 ssh漏洞 ssh9.9p2 CVE-2025-23419 性能分析 db sonoma 自动更新 繁忙 解决办法 替代网站 汇总推荐 AI推理 CDN AI代码编辑器 matplotlib Linux的基础指令 etl wps yaml Ultralytics 可视化 keepalived ArcTS 登录 ArcUI GridItem arkUI OpenSSH 自定义客户端 SAS safari 系统 大数据平台 chrome devtools chromedriver rocketmq 历史版本 下载 安装 wsgiref Web 服务器网关接口 flink nfs 信息可视化 网页设计 rnn xcode 华为机试 大大通 第三代半导体 碳化硅 回显服务器 UDP的API使用 合成模型 扩散模型 图像生成 Windows ai工具 java-rocketmq jina ardunio BLE etcd 数据安全 RBAC wireshark linux驱动开发 webstorm 视觉检测 frp GIS 遥感 WebGIS nvidia Docker引擎已经停止 Docker无法使用 WSL进度一直是0 镜像加速地址 wordpress 无法访问wordpess后台 打开网站页面错乱 linux宝塔面板 wordpress更换服务器 perf 金融 seatunnel ue4 着色器 ue5 OpenHarmony 真机调试 TCP协议 项目部署到linux服务器 项目部署过程 IMX317 MIPI H265 VCU 本地部署 composer CVE-2024-7347 rag ragflow 源码启动 产测工具框架 IMX6ULL 管理框架 Kylin-Server 服务器安装 语法 iperf3 带宽测试 gradle h.264 ip命令 新增网卡 新增IP 启动网卡 Logstash 日志采集 黑苹果 网卡的名称修改 eth0 ens33 fd 文件描述符 sdkman cpp-httplib sequoiaDB 开发 KylinV10 麒麟操作系统 Vmware cuda cudnn anaconda milvus 捆绑 链接 谷歌浏览器 youtube google gmail WebRTC 用户缓冲区 web3 模拟实现 图形渲染 prometheus数据采集 prometheus数据模型 prometheus特点 SenseVoice lio-sam SLAM IPMITOOL 硬件管理 相机 EtherCAT转Modbus ECT转Modbus协议 EtherCAT转485网关 ECT转Modbus串口网关 EtherCAT转485协议 ECT转Modbus网关 IMM iBMC UltraISO alias unalias 别名 cocoapods threejs 3D 混合开发 环境安装 JDK regedit 开机启动 可信计算技术 HiCar CarLife+ CarPlay QT RK3588 yolov8 CLion 环境迁移 实时互动 Node-Red 编程工具 流编程 VMware创建虚拟机 视频编解码 音乐库 飞牛 实用教程 python3.11 dash 正则表达式 ubuntu24.04.1 tidb GLIBC 源码 webgl fast bat 端口 查看 ss centos-root /dev/mapper yum clean all df -h / du -sh 工作流 workflow 考研 在线office 僵尸世界大战 游戏服务器搭建 远程看看 远程协助 京东云 知识图谱 基础入门 sqlite3 Anolis nginx安装 linux插件下载 cpu 实时 使用 私有化 ldap trea idea IPv4 子网掩码 公网IP 私有IP SSH 密钥生成 SSH 公钥 私钥 生成 linux 命令 sed 命令 chrome 浏览器下载 chrome 下载安装 谷歌浏览器下载 mariadb ShenTong epoll 自动化任务管理 开机自启动 企业网络规划 华为eNSP easyui langchain 多个客户端访问 IO多路复用 TCP相关API AP配网 AK配网 小程序AP配网和AK配网教程 WIFI设备配网小程序UDP开 MySql 移动魔百盒 代理 USB转串口 harmonyOS面试题 大文件分片上传断点续传及进度条 如何批量上传超大文件并显示进度 axios大文件切片上传详细教 node服务器合并切片 vue3大文件上传报错提示错误 大文件秒传跨域报错cors 压测 ECS 邮件APP 免费软件 yum源切换 更换国内yum源 宕机切换 服务器宕机 键盘 Linux find grep vr lua vue-i18n 国际化多语言 vue2中英文切换详细教程 如何动态加载i18n语言包 把语言json放到服务器调用 前端调用api获取语言配置文件 代理服务器 DOIT 四博智联 防火墙 NAT转发 NAT Server aarch64 编译安装 HPC 域名服务 DHCP 符号链接 配置 mq PVE 常用命令 文本命令 目录命令 AI-native Docker Desktop 树莓派 VNC win服务器架设 windows server deepseek r1 thingsboard 迁移指南 办公自动化 自动化生成 pdf教程 make命令 makefile文件 相差8小时 UTC 时间 css3 sentinel iphone iftop 网络流量监控 状态模式 g++ g++13 影刀 #影刀RPA# 状态管理的 UDP 服务器 Arduino RTOS 镜像 服务器管理 配置教程 网站管理 arcgis Ubuntu DeepSeek DeepSeek Ubuntu DeepSeek 本地部署 DeepSeek 知识库 DeepSeek 私有化知识库 本地部署 DeepSeek DeepSeek 私有化部署 Typore UOS1070e UDP 运维监控 leetcode 推荐算法 Attention 服务器时间 qemu libvirt figma 网络爬虫 增强现实 沉浸式体验 应用场景 技术实现 案例分析 AR ping++ visual studio DocFlow 上传视频至服务器代码 vue3批量上传多个视频并预览 如何实现将本地视频上传到网页 element plu视频上传 ant design vue vue3本地上传视频及预览移除 虚幻引擎 论文阅读 mm-wiki搭建 linux搭建mm-wiki mm-wiki搭建与使用 mm-wiki使用 mm-wiki详解 自动化编程 uni-file-picker 拍摄从相册选择 uni.uploadFile H5上传图片 微信小程序上传图片 嵌入式Linux IPC hosts gnu deep learning VS Code 网络建设与运维 网络搭建 神州数码 神州数码云平台 云平台 TrueLicense grub 版本升级 扩容 searxng 网络药理学 生信 PPI String Cytoscape CytoHubba 车载系统 大模型推理 Ubuntu共享文件夹 共享目录 Linux共享文件夹 磁盘镜像 服务器镜像 服务器实时复制 实时文件备份 docker命令大全 nlp minecraft neo4j 分布式训练 西门子PLC 通讯 本地部署AI大模型 MVS 海康威视相机 聚类 ai小智 语音助手 ai小智配网 ai小智教程 esp32语音助手 diy语音助手 EtherNet/IP串口网关 EIP转RS485 EIP转Modbus EtherNet/IP网关协议 EIP转RS485网关 EIP串口服务器 dock 加速 风扇控制软件 CentOS Stream CentOS 基础环境 ubuntu20.04 开机黑屏 存储维护 NetApp存储 EMC存储 匿名管道 人工智能生成内容 沙盒 word 拓扑图 多路转接 docker搭建pg docker搭建pgsql pg授权 postgresql使用 postgresql搭建 内网服务器 内网代理 内网通信 VM搭建win2012 win2012应急响应靶机搭建 攻击者获取服务器权限 上传wakaung病毒 应急响应并溯源 挖矿病毒处置 应急响应综合性靶场 openstack Xen Redis Desktop 热榜 项目部署 wpf xshell termius iterm2 IO模型 数据仓库 数据库开发 database spark HistoryServer Spark YARN jobhistory 信创 信创终端 中科方德 服务网格 istio js DBeaver kerberos Cookie seleium 目标跟踪 OpenVINO 推理应用 鸿蒙开发 移动开发 C# MQTTS 双向认证 emqx PX4 SRS 流媒体 直播 系统开发 binder framework 源码环境 软负载 渗透 curl wget 本地化部署 大模型应用 AI Agent 字节智能运维 搭建个人相关服务器 IO 离线部署dify swoole 玩机技巧 软件分享 软件图标 docker部署翻译组件 docker部署deepl docker搭建deepl java对接deepl 翻译组件使用 Qwen2.5-VL vllm rpa 内网环境 飞牛nas fnos triton 模型分析 欧标 OCPP 嵌入式系统开发 Deepseek-R1 私有化部署 推理模型 x64 SIGSEGV xmm0 远程服务 粘包问题 conda配置 conda镜像源 李心怡 Linux的权限 大模型部署 docker部署Python 产品经理 MDK 嵌入式开发工具 论文笔记 sublime text