目录
1.1、认识yum
1.2、yum的三板斧
1.3、安装lrzsz 或者xftp。
1.3.1lrzsz的下载和使用
1.4、 vim的使用
1.4.1、vim的三种模式
1.4.2、vim的三种模式的作用
1.4.3、 vim的基本操作
1.4.3、vim在不同模式下命令集合
1.4.4、swap文件没有正常关闭应该怎么样处理呢?
1.4.5、生成可执行程序过程
1.4.6、静态编译和动态编译
1.5、调试器(gdb)
1.5.1、程序发布的两种方式:debug模式和release模式
1.5.2、基本的调试技巧
1.5.3、调试崩溃的程序产生的coredump文件
1.1、认识yum
要安装vim首先我们要知道一个工具yum,yum就是一个应用商店,类似于华为商店,苹果商店等等,里面有经过yum源认证的软件安装包。如果程序员想要那个软件包,就可以使用yum搜索和安装。由于是从yum源下载到本地进行安装,所以必须要有网络。
1.2、yum的三板斧
yum list :查看yum都有哪些安装包加上管道进行过滤
yum list | grep“tree”
yum install 【-y】//-y的意思就是在询问我们是否安装的时候,选择是【待要安装的软件包名称】:
yum remove 【待要卸载的软件包名称】:卸载某个软件包
1.3、安装lrzsz 或者xftp。
//此外在这里介绍一下lrzsz和xftp的作用。lrzsz和xftp其实就是两个支持我们的Linux系统和windows系统之间文件的上传和下载一个软件。通过一张图来理解
![](https://img-blog.csdnimg.cn/580bf056045c4a27983a8c6b0b320c3f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_18,color_FFFFFF,t_70,g_se,x_16)
1.3.1lrzsz的下载和使用
rz:将windows机器的文件上传到linux机器中
sz:将linux操作系统的文件下载到windows机器中
//这里注意lrzsz只支持文件的上传的下载不支持文件夹,当然要是强行用lrzsz的话可以将文件夹压缩进行传输
![](https://img-blog.csdnimg.cn/6b79ef5db577474e9ef7a704f07662ca.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
(1)xftp的作用和lrzsz的作用是一样的只不过它更直观是图形界面的。
奉上xftp的安装包 //这里是xftp7的安装包xftp6的安装包可以看我往期博客关于xshell6的详细使用Xshell的安装及使用超详细教程_月半木斤的博客-CSDN博客
链接:https://pan.baidu.com/s/1pmGozHt2dBlRCzkCvPWUYw
提取码:m9qr
安装好之后:
![](https://img-blog.csdnimg.cn/ce2bdcd621e84152a0ccd11c9b5ed748.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
进入界面我们就可以拖动传输文件了,十分的方便快捷,因此我们多在工作中使用
![](https://img-blog.csdnimg.cn/54df1da8100449188708c35738f9311e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
安装vimforcpp
只要输入这个网址https://gitee.com/HGtz2222/VimForCpp
当然我们安装好vim之后它只是一个最简陋的版本里面什么都没有,我们写代码也是要追求 幸福感的嘛,所以我们要安装一个插件,这里只需要输入命令
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh 就可以安装插件了。在那个用户下执行就在那个用户下生效。
代码编辑风格需要在vim~/.vimrc文件夹里修改文件内容,将50,51,52行改为4
![](https://img-blog.csdnimg.cn/0a58be67eaa6474d9b8d61085a79d471.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
如果你是代码风格习惯将{}放在函数的下一行可以将185行前边加上双引号注释一下。![](https://img-blog.csdnimg.cn/7fbc0aca8ae443bf894ac33153f69206.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
1.4、 vim的使用
1.4.1、vim的三种模式
vim一共有 三个模式:普通模式、插入模式、底行模式。这三种模式可以互相转换,在不同的模式下可以进行相应的操作,下面我们借助一张图来理解:
![](https://img-blog.csdnimg.cn/9610f0bb88d84eb599148a6f8086fa83.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
1.4.2、vim的三种模式的作用
正常
/
普通
/
命令模式
(Normal mode):
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode
下,或者到
last line mode
插入模式
(Insert mode):
只有在Insert mode
下,才可以做文字输入,按「
ESC
」键可回到命令行模式。该模式是我们后面用的最频繁 的编辑模式。
末行模式
(last line mode):
文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+:
即可进入该模 式。要查看你的所有模式:打开vim
,底行模式直接输入
1.4.3、 vim的基本操作
进入vim,
在系统提示符号输入
vim
及文件名称后,就进入
vim
全屏幕编辑画面
:
$ vim test.c 不过有一点要特别注意,就是你进入vim
之后,是处于
[
正常模式
]
,你要切换到
[
插入模式
]
才能够输入文 字。
[正常模式]切换至[插入模式]
输入a
输入i
输入o
[插入模式]切换至[正常模式]
目前处于[
插入模式
]
,就只能一直输入文字,如果发现输错了字
,
想用光标键往回移动,将该字删除,可 以先按一下「ESC
」键转到
[
正常模式
]
再删除文字。当然,也可以直接删除。
[正常模式]切换至[末行模式]
「shift + ;
」
,
其实就是输入「:」
退出
vim
及保存文件
,
在
[
正常模式
]
下,按一下「:」冒号键进入「
Last line mode
」
,例如:
: w (保存当前文件)
: wq (输入「
wq
」
,
存盘并退出
vim)
: q! (输入
q!,
不存盘强制退出
vim)
1.4.3、vim在不同模式下命令集合
(1)插入模式
按「i」切换进入插入模式「insert mode
」,按
“i”
进入插入模式后是从光标当前位置开始输入文件;
[重要]
按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
从插入模式切换为命令:
按「ESC
」键。
[重要]
(2)正常模式
正常模式下的七字真言要牢记:移删复替撤更跳
移动光标
vim可以直接用键盘上的光标来上下左右移动,但正规的
vim
是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格
按「G」:移动到文章的最后
[重要]
按「 $
」:移动到光标所在行的
“
行尾
”
[重要]
按「^」:移动到光标所在行的“
行首
”
[重要]
按「w
」:光标跳到下个字的开头
[重要]
按「e」:光标跳到下个字的字尾
按「b」:光标回到上个字的开头
[重要]
按「#l
」:光标移到该行的第
#
个位置,如:
5l,56l
按[gg
]:进入到文本开始
[重要]
按[shift
+
g
]:进入文本末端
按「ctrl
」
+
「b」:屏幕往
“
后
”
移动一页
按「ctrl
」
+
「f」:屏幕往
“
前
”
移动一页
按「ctrl
」
+
「u」:屏幕往
“
后
”
移动半页
按「ctrl
」
+
「d」:屏幕往
“
前
”
移动半页
删除文字
「x」:每按一次,删除光标所在位置的一个字符
[重要]
「dd」:删除光标所在行
[重要]
「#dd」:从光标所在行开始删除
#
行
[重要]
「#x
」:例如,「
6x
」表示删除光标所在位置的
“
后面(包含自己在内)
”6
个字符
「X」:大写的X
,每按一次,删除光标所在位置的
“
前面
”
一个字符
「#X
」:例如,「
20X
」表示删除光标所在位置的
“
前面
”20
个字符
复制
「yy
」:复制光标所在行到缓冲区。
[重要]
「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”
有关的复制命令都必须与
“p”
配合才能完 成复制与粘贴功能。
[重要]
「yw
」:将光标所在之处到字尾的字符复制到缓冲区中。
「#yw
」:复制
#
个字到缓冲区
「#yy
」:例如,「
6yy
」表示拷贝从光标所在的该行
“
往下数
”6
行文字。
替换
「r」:替换光标所在处的字符。
「R
」:替换光标所到之处的字符,直到按下「
ESC
」键为止。
[重要]
撤销上一次操作
「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”
可以执行多次回 复。
[重要]
「ctrl + r
」
:
撤销的恢复
[重要]
更改
「ctrl
」
+
「g」列出光标所在行的行号。
[重要]
「cw」:更改光标所在处的字到字尾处
「c#w
」:例如,「
c3w
」表示更改
3
个字
跳至指定的行
「#G
」:例如,「
15G
」,表示移动光标至文章的第
15
行行首。
(3). 底行模式
在使用末行模式之前,请记住先按「
ESC
」键确定您已经处于正常模式,再按「:」冒号即可进入末行模式。
列出行号
「set nu
」
:
输入「
set nu
」后,会在文件中的每一行前面列出行号。
[重要]
跳到文件中的某一行
「#」:
「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字
15
, 再回车,就会跳到文章的第15
行。
查找字符
「/关键字」:
先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按
「n」会往后寻找到您要的关键字为止。
「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直 按「n」会往前寻找到您要的关键字为止。
保存文件
[重要]
「w
」
:
在冒号输入字母「
w
」就可以将文件保存起来
离开
vim
[重要]
「q」:按「q」就是退出,如果无法离开vim
,可以在「q」后跟一个「!」强制离开
vim
。
「wq
」:一般建议离开时,搭配「
w
」一起使用,这样在退出的时候还可以保存文件。
(4)其他快捷操作
多行注释:
1、ctrl+v
2、选中需要注释的行,用hjkl移动光标
3、shift+i:进入插入模式
4、输入注释符号
5、Esc
多行去注释:
1、ctrl+v
2、选中需要去注释的行当中的注释字符,使用hjkl移动光标
3、x删除掉
快速替换:
单行首个目标字符串替换
s / [待替换的目标字符串] / [替换成为该字符串]
单行全部目标字符串的替换
s / [待替换的目标字符串] / [替换成为该字符串] /g
全文替换
%s / [待替换的目标字符串] / [替换成为该字符串] /g
指定行替换
num1,num2s/[待替换的目标字符串] / [替换成为该字符串] /g
结论:
g:表示替换当前行所有
%:代表当前所有行
1.4.4、swap文件没有正常关闭应该怎么样处理呢?
(1)首先我们应该理解什么是swap文件
在我们每次用vim打开一个文件时都会产生一个副本(swap文件),用来保存之前的版本,这样我们就可以理解为什么在我们按下“u”撤销之后会回到上一步。在每次关闭vim打开的文件时随之对应的swap文件也会关闭,如果我们异常退出的话,那么就会导致文件在关闭时没有关闭swap文件从而我们再次打开文件时会出现这样一个界面。
![](https://img-blog.csdnimg.cn/092cbb086a10433190da2a42118421d9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
我们可以看到最上面写着Found a swap file by the name 。。。发现了一个名位swap的文件。
那么此时我们只需要将这个swap文件删除即可。将其路径复制,按q直接退出,然后再命令行输入命令rm+[路径] 将其删除。
![](https://img-blog.csdnimg.cn/56ed4623e8d54199bab3313f3aaa5c9c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
此时我们再打开文件发现可以正常打开了。
1.4.5、生成可执行程序过程
预处理
(
进行宏替换
)
预处理功能主要包括宏定义
,
文件包含
,
条件编译
,
去注释等。
预处理指令是以
#
号开头的代码行。
实例
:
gcc –E hello.c –o hello.i
选项
“-E”,
该选项的作用是让
gcc
在预处理结束后停止编译过程。
选项
“-o”
是指目标文件
,“.i”
文件为已经过预处理的
C
原始程序。
编译(生成汇编)
在这个阶段中
,gcc
首先要检查代码的规范性、是否有语法错误等
,
以确定代码的实际要做的工作
,
在检查
无误后
,gcc
把代码翻译成汇编语言。
用户可以使用
“-S”
选项来进行查看
,
该选项只进行编译而不进行汇编
,
生成汇编代码。
实例
:
gcc –S hello.i –o hello.s
汇编(生成机器可识别代码)
汇编阶段是把编译阶段生成的
“.s”
文件转成目标文件
读者在此可使用选项
“-c”
就可看到汇编代码已转化为
“.o”
的二进制目标代码了
实例
:
gcc –c hello.s –o hello.o
一键生成可执行程序
我们也可以用一条指令将我们的源文件生成可执行程序
gcc text.c -o text
在我们生成可执行程序后我们可以通过命令ldd +文件名看到程序u、运行时所用到的共享库
\\扩展:!gcc
![](https://img-blog.csdnimg.cn/1b24bbfd157143598ae6f7e5c90053fe.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
1.4.6、静态编译和动态编译
动态编译:在编译程序时直接输入gcc+[源文件名] -o +[生成目标程序] 这就是动态编译
静态编译:而在编译时输入gcc+[源文件名] -o +[生成目标程序] -static 这时就是静态编译
![](https://img-blog.csdnimg.cn/3e4be91b0e894e26bb476bc71ba19de2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
如上图就是静态编译,我们再动态编译生成一个可执行程序
![](https://img-blog.csdnimg.cn/68c666321c3c408aaa894df15dcc781c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
我们可以看出两者执行结果并无差别 ,我们此时通过ll命令来查看文件的具体属性可以看到
![](https://img-blog.csdnimg.cn/93248d4be7c14c9ab01d57c4bb317288.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
静态编译的文件比静态编译的文件整整大了两个数量级。这是为什么呢,这就要从两者的区别上来说了,静态编译的时候会将库文件全部编译到文件中去,而动态编译只会在执行的时候再去执行库文件当中的代码,而静态编译则不同他会将库文件中的代码直接编译到程序当中去,所以占用内存十分之大。
(注:我们在进行静态编译的时候可能会遇到这样的情况
这并不是说我们输入的命令有问题,而是可能系统缺少相应的lib
我们可以下载相应的lib
![](https://img-blog.csdnimg.cn/68e55f504fb743e9b63179e976c2242f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_15,color_FFFFFF,t_70,g_se,x_16)
1.5、调试器(gdb)
1.5.1、程序发布的两种方式:debug模式和release模式
在我们之前提到的程序编译命令编译出来的都是release模式。而要想编译出debug版本则需要在命令行后加上-g。
1.5.2、基本的调试技巧
(1)run命令:首先我们写一个较为简单的程序用作调试
进入调试:
![](https://img-blog.csdnimg.cn/d7e8d7aca7cc4a6eae6f3a687343146a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
(2)在调试时查看代码:
输入list指令(可以简写为"l"):
![](https://img-blog.csdnimg.cn/cc1ed98f844145cab813c1f4ed4923e3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
如果想查看剩余代码可以再输入一个l
![](https://img-blog.csdnimg.cn/8a209368be5447e8a6f905b68b8f7ea7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
那么如何查看上边的代码呢?
只需要输入l+[空格]+[-]
![](https://img-blog.csdnimg.cn/812776ac2a5d472b81e0f22d57564f01.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
(3)断点
3.1、下断点: 输入指令breakpoint(简写为b)+[行号]
![](https://img-blog.csdnimg.cn/598503a3ca7f435bb1fbd470de607cbe.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
然后我们再让程序运行,可以发现停在我们的11行
![](https://img-blog.csdnimg.cn/a2b04a4741374d4898cc70a9c3f816fb.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
3.2、查看断点
输入:i b
![](https://img-blog.csdnimg.cn/5bc28ea8f1074d9b8063ab806c113927.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
3.3、 删除断点
删除序号为n的断点: delete breakpoints n
删除所有断点:delete breakpoints
![](https://img-blog.csdnimg.cn/5c58d0a4ea134cff88013e6803f2e59d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
3.4、 禁用断点:disable breakpoint
![](https://img-blog.csdnimg.cn/2e7671990fea41df984a3cfada141b12.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
3.5、 启用断点:enable breakpoint
![](https://img-blog.csdnimg.cn/a1164a6ad2594822bf9d56735fb732c4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
(4) 逐过程执行(对应我们的vs中的F10)next(缩写n)
![](https://img-blog.csdnimg.cn/d0df4c1f25c74f909981e33a687d04e6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
(5)逐语句执行(对应我们vs中的F11)step(缩写s)
![](https://img-blog.csdnimg.cn/f42ab4f6b6024be5bb42839896cdaa6a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
(6)查看变量内容
现在我们已经会了调试最基础的操作,调试过程中要想找出bug所在就必须要查看变量中内容,接下来我们学习如何查看变量内容。我们进入调试,然后在程序的11行下个断点,然后run起来。接下来要查看a当中的内容,输入指令print(简写p)+a![](https://img-blog.csdnimg.cn/0b039439fc4a4ea4800a22c6dce5c92e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
(程序内容)
![](https://img-blog.csdnimg.cn/c18d3752444740188397445bb4453394.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
查看当前栈帧局部变量的值:info locals
![](https://img-blog.csdnimg.cn/f691d25998164dc9a64521add4c8bbdb.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
(7)查看调用堆栈bt
![](https://img-blog.csdnimg.cn/0abb649f6fbd4908b97f0a45bcdea709.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
我们还可以随意跳转到任意函数只要输入l+[函数名]
![](https://img-blog.csdnimg.cn/ff83bc641f3e46dba10cd9a784536e63.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
程序正常跑完退出
![](https://img-blog.csdnimg.cn/42f133e772834d33b8dc9495b1479b62.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
退出调试(q)
![](https://img-blog.csdnimg.cn/d48b8c0aedf64c459fc820bc2c220553.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
1.5.3、调试崩溃的程序产生的coredump文件
(1)coredump文件:核心转储文件,实在程序崩溃的一瞬间内存的影像(比如说崩溃时变量中存储的值等等)相当于案发现场
(2)ulimit -a
core file size:决定产生的coredump文件最大能够有多大
一共几种情况
1、core file size为0
![](https://img-blog.csdnimg.cn/2652cfaae59e42c5ba4e12566c2d9937.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
2、core file size为sunlimited:不会限制核心转储文件的大小,只要文件小于磁盘内存就可以生成。
3、修改core file size的大小:修改core file size文件的大小可以通过命令unlimit -c unlimited。
![](https://img-blog.csdnimg.cn/1aab39bd4be4461384f8a3e69badef45.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
(3)调试命令
gbd可执行程序coredump文件
我们先模拟一个程序崩溃产生核心转储文件的场景:
![](https://img-blog.csdnimg.cn/8e28567b2c20477da23174820b274579.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_14,color_FFFFFF,t_70,g_se,x_16)
可以看到这是一个典型的越界访问,段错误。
![](https://img-blog.csdnimg.cn/39cc2c244cee409882dbe7fc88523440.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
调试coredump文件
输入:gdb+ [可执行程序]+ core文件
![](https://img-blog.csdnimg.cn/bbd742cc3f6046a5933eecd5a7397759.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
看官不要忘记点一个小小的赞,你的赞就是我的动力!!!
![](https://img-blog.csdnimg.cn/6a6204a7c2384914aa9de17ced34642f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/38953093ce864f7886b7c85bec7d9b1e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyI5Y2K5pyo5pak,size_20,color_FFFFFF,t_70,g_se,x_16)