论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
开源技术
›
开源技术
›
Linux工具的使用-【git的理解和使用】【调试器gdb的使用 ...
Linux工具的使用-【git的理解和使用】【调试器gdb的使用】 ...
饭宝
金牌会员
|
2024-12-1 03:12:56
|
显示全部楼层
|
阅读模式
楼主
主题
891
|
帖子
891
|
积分
2673
Linux工具的使用-03
1.git
1.1git是什么
git简单来说就是一个版本控制器。【去中心分布式版本控制器】
它会对我们的代码的汗青所有版本做一个备份一样的工作。
固然git不止这个功能,它还能做到**【多分支管理】【汗青版本回退】**等功能。
但是现在的我只能用到备份这个功能。
git是开源的。因此有许多人都在使用,这其中就有些人对git进行了商业化包装,github就出现了
github在国外得到了成功之后,国内访问github访问速率不理想,因此国内工程师也开辟了一个gitee出来
1.2git在linux下的操作
下面所有的操作都得创建在linux系统中下载了git的yum源
yum install git
复制代码
输入上面的指令可以下载,普通用户下载要加sudo
1.2.1创建git仓库
起首创建一个仓库
在gitee或者github上面创建都是可以的
然后就将指令git clone 仓库地址打到Linux终端运行
敲完指令后就需要验证,输入gitee的账号和密码
注意这里的账号密码
成功之后,当前目录下就会出现一个仓库
仓库内里的文件和在gitee上看到的文件是一致的,由于仓库本质就是一个目录(文件)
1.2.2 .gitignore
.gitgnore这是一个文件,在这个文件内里的内容出现的后缀,都不会被添加到仓库中。
目的:保持远程仓库gitee不要那么乱,不然一个项目许多七零八落的文件都会被一起上传进去,以后找起来很麻烦
这里默认会有一些无法提交的后缀,还可以自己补充后缀,用vim修改即可
检察仓库状态【这里用到了status,后面有说】
上面我们添加了一个以.sln后缀的文件是无法被提交到远程仓库的
然后要提交commit
再push
检察远程仓库的.gitignore文件,检察是否push成功
可以看到更新成功
1.2.3 .git(当地仓库)
在linux仓库的目录下有一个.git目录。
tree一下
.git其实就是当地仓库
git仓库本质就是就是一个目录。这个目录内里包罗.git目录 + 内里的内容(代码文件和其他文件)
push到远端其实就是将当地的.git目录的内容同步到gitee上的.git目录【gitee的.git目录是不显示的】
1.2.4 add (添加)
在git仓库中添加了一个项目(实现进度条)
此时如何做到上传代码到当地仓库,然后再push到gitee的远程仓库上呢?
先要用add操作
git add .
复制代码
此时myproc就被添加到了.git目录中的一个临时区域。还没有commit,不会归并到.git中
1.2.5 commit(提交)
commit将add的文件提交到当地仓库.git目录中,这里真正的归并到当地仓库.git目录里去。
git commit -m '第一次提交'
复制代码
这里后面一定要跟日志'日志内容',不然就会报错
commit假如失败一样平常都是无法找到邮箱地址,没有配置好,配置一次就行了
如下图所示:
1.2.6push(推送)
push将当地仓库推送到远程仓库来进行同步。
git push
复制代码
如下图所示:
push之后,gitee上的远程仓库.git就已经被当地仓库.git同步了。
打开gitee的仓库可以看到提交成功
对两个特别情况的处置惩罚
处置惩罚完毕之后,是这样的
配置免密码push
git当地免密码和账号pull、push_没有git账号怎么拉代码-CSDN博客
1.2.7 log(获取提交记录)
输入下面指令来得到提交的记录
git log
复制代码
1.2.8 status(获取仓库状态)
输入下面指令可以检察当前仓库更改状态,
就是间隔上次提交发生的变化。
git status
复制代码
如下图所示:
这里先检察状态,然后修改文件名,然后再检察状态
commit发生改变的文件
然后再push
检察gitee的远程仓库,可以发现,只提交了readme.txt,ProCessOn.exe没有提交。
这是由于.gitignore里限定了.exe后缀结尾的文件。因此无法提交
1.2.9 mv(修改已在仓库的文件名)
再仓库里假如想修改一个已经提交了的文件的文件名,那么需要用到git mv,而不能直接使用mv修改linux的文件名。
1.2.10 rm(删除已经在仓库的文件)
假如想删除已经在仓库中的文件,要用git rm,并且还要commit,并且push,这样当地仓库和远程仓库才气都删除。
如下图所示:
1.2.11 pull(拉取远程仓库来同步当地仓库)
假如直接修改了诶远程仓库,那么下次从当地仓库推送的时候就会冲突。
pull存在的意义:
在多人进行开辟的时候,其中一人在当地仓库push到远程仓库之后,对其他人来说,远程仓库就被修改了,和当地仓库不一致了。因此其他人想要push都得先pull拉取远程仓库来同步当地仓库才行
通过git pull来拉取远程的仓库,来同步当地的仓库。
这个时候当地仓库在push就会冲突
这个时候就要pull来解决
pull完之后就正常了
注意,这里将远程仓库拉取到当地仓库,远程仓库的内容会同步到当地仓库的
我在远程仓库多加了一行空,pull之后,同步到当地仓库,下面将内容cat出来也可以看到
现在提交了这么多次,现在在log一下,可以感受到log的作用了
2.Linux调试器—gdb
现在为止,
Linux的工具中,已经知道了下载用的软件包管理器yum,编译用的编译器gcc/g++,编辑器vim,主动化构建工具make/Makefile,还有版本控制器git。
接下来要相识的是
Linux的调试器——gdb
调试,在window操作系统中,已经很熟悉了。但是window是图形化界面,linux在不连接VS等工具进行开辟的话,是下令行界面。
因此对于下令行界面的调试就需要用到gdb。
关于调试的思路无论是在Linux还是window都是一样的
但是调试的操作方式就不一样了。在Linux叫做下令行调试
2.1gdb的使用
使用gdb得先确保当前linux系统中存在,没有就得下载
yum install -y gdb
复制代码
普通用户sudo一下。
gdb的使用选项:
gdb binFile 退出: ctrl + d 或 quit 调试下令:
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l 函数名:列出某个函数的源代码。
r或run:运行步伐。
n 或 next:单条执行。
s或step:进入函数调用
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break :检察断点信息。
finish:执行到当前函数返回,然后挺下来等候下令
print§:打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量:打印变量值。
set var:修改变量的值
continue(或c):从当前位置开始连续而非单步执行步伐
run(或r):从开始连续而非单步执行步伐
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
info(或i) breakpoints:参看当前设置了哪些断点
display 变量名:跟踪检察一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪
until X行号:跳至X行
breaktrace(或bt):检察各级函数调用及参数
info(i) locals:检察当前栈帧局部变量的值
quit:退出gdb
2.2gdb的使用案例
先通过vim来编写一段代码:
然后使用Makefile:
运行结果如下:
这是正常运行的情况,假设我们在编写代码的时候出了点错误。如下图所示:
这样结果就是4950而不是5050.
因此这个时候我们就要用gdb去调试,去找那里出题目了
直接输入gdb test
但是无法调试成功
这里的no debugging symbols found其实是**由于Linux中gcc默认编译出来的步伐,是通过release生成了。而假如想要调试,是需要在debug模式下生成的。**这个在使用VS2022的时候也知道
为什么gcc默认使用release模式呢?
由于一个可执行文件大概率是给用户使用的,用户不需要也不会想要一个debug模式的可执行文件,它需要的是体积更小,优化更好,更好用的一个可执行文件。
debug模式是给步伐员来方便进行调试的。
以是,让gcc编译的时候用debug模式就行
在gcc编译的时候添加一个-g选项
然后make一下,debug模式的可执行文件test_debug就编译出来了
可以看到debug模式生成的可执行文件的巨细肯定是大于release模子生成的可执行文件
拓展:readelf -S
判定一个可执行文件是debug还是release模式,可以用readelf -S 可执行文件的文件名
好比test是release模式生成的可执行文件
执行readelf -S test的结果是
这个图片是可执行文件test的二进制代码的一种表现方式。虽然可执行文件是一堆二进制代码,但是这堆二进制代码也是有格式的、
想要看懂这个表格需要汇编原理的知识,这里不需要看懂,只需要知道debug和release的可执行文件的表格的不同之处
接下来看debug生成的可执行文件test_debug
执行readelf -S test_debug的结果如下:
假如是debug模式生成的可执行文件,那么其二进制代码中一定会有关于debug的一篇区域。
并且release模式生成的可执行文件,其二进制代码中不会有关于debug的区域
用gdb对test_debug进行调试:
输入gdb test_debug
2.2.1显示源代码
这里源代码本来也不多,按2次enter就可以将源代码全部显示出来
2.2.2打断点(VS的F9)
然后就按照调试的老例子,打断点,开始调试
在gdb中打断点就是b + 行号 或者 break + 行号
如何检察断点呢?
输入info b,可以看到之前打过的所有的断点的位置
2.2.3删除断点
假如不想要断点想删除就输入d 断点编号
2.2.4开始调试(VS的F5)
输入r(run)开始调试,会主动找到次序执行代码的第一个断点的位置
这里跳到了位于25行的断点的位置。
2.2.4.1跳到下个断点
假如要从一个断点跳到下一个断点
输入c(continue)
这个过程就和VS有多个断点,要跳到下一个断点要再按一次F5是一样的
2.2.5逐过程(VS的F10)
输入n(next)
逐过程,不进入AddToVal函数内部,而是跳过
2.2.6逐语句(VS的F11)
输入s(step)
进入到Print函数内部,参数sum此时是4950,这说明代码是在AddToVal函数内部出题目的,打印是没有题目的,参数sum应该是是5050,而不是4950
此时再检察一次断点
这里多了一句话,意思是这个1号断点已经被命中一次了
此时假如要重新开始调试就在输入一次r
这个时候会问你是否要重新调试,输入y表现重新开始调试
2.2.7检察调用堆栈
但是这个时候我们发现在循环内里,无论是输入s还是n,都好像在不绝的执行语句,无法调出监视窗口和函数堆栈。
看不到变量的变化和变量的地址
【假如已经进入循环可以一直按回车】
由于gdb会记录迩来一次指令,这里疯狂按回车相当于每次都是输入的s。
输入bt来检察函数堆栈
可以看出来是从main堆栈进入的AddToVal堆栈
2.2.7.1将当前堆栈运行完毕
假如我们既不想新打断点,跳跃已往,又想直接执行完一个函数。
就可以用到finish
此时就结束了当前堆栈的调用,相当于直接执行完了该函数,可以看到回到了25行。
这个是非常有用的,假如finsh之后,代码挂掉了,就说明是当前堆栈,当前函数有题目,就可以缩小调试范围了。
2.2.8监视变量(显示变量)
2.2.8.1p(监视单次变量)
输入p 变量名可以监视变量
但是这个有个题目,只能监视一次变量,每次走一步都得重新输入p,重新检察,这样很麻烦,能不能像VS那样有个监视窗口的存在呢?
2.2.8.2display(常显示变量)
输入display就可以实现
这里i就会一直挂在上面,方便调试。
将需要监视变量都display一下
就可以得到一个类似监视窗口一样的东西。可以直观看到每一步变量的变化
要检察地址就加个&
假如不想要监视某个变量就用undisplay
要注意取消监视变量,需要输入的是变量的编号
2.2.9跳出循环
假如进入了一个循环,循环很长,且认为题目不出在循环上,想要跳出循环,就输入until + 行数。这里的行数得是循环外的
循环一直在14~16行,因此until到17行,相当于跳出循环了
2.2.10检察局部变量
输入info local,来检察当前栈帧的局部变量的值
2.2.11禁用断点
输入 disable b 1,表现禁用1号断点、
2.2.12启用断点
输入enable b 1,表现启用1号断点
2.3gdb的总结
gdb的使用选项有特别多,使用起来也比较麻烦,但是最常用的几个选项可以或许使用就行了
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
饭宝
金牌会员
这个人很懒什么都没写!
楼主热帖
53基于java的资源博客论坛系统设计与实 ...
zotero+坚果云实现多pc端及iPad同步管 ...
天涯神贴合集500篇(2023最新) ...
Android——一个简单的记账本APP ...
需求:清空三个月前的操作日志,并生成 ...
面试官:@Configuration 和 @Component ...
nginx 常用指令配置总结
PerfView专题 (第十一篇):使用 Diff ...
【分布式计算】学习笔记(期末复习) ...
Python潮流周刊#5:并发一百万个任务要 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表