您的位置:首页 > 科技 > 能源 > 【Linux取经之路】编译器gcc/g++的使用 调试器gdb的使用

【Linux取经之路】编译器gcc/g++的使用 调试器gdb的使用

2024/9/22 1:18:14 来源:https://blog.csdn.net/bit_pan/article/details/142267588  浏览:    关键词:【Linux取经之路】编译器gcc/g++的使用 调试器gdb的使用

目录

背景知识

编译器gcc/g++的安装

编译器gcc/g++的使用

调试器gdb的使用

cgdb 

条件断点


背景知识

子曰:“温故而知新”。在谈gcc/g++的使用之前,我们先来复习编译的4个阶段,也算是为下面的内容做一些铺垫,请看思维导图。

编译器gcc/g++的安装

在CentOS下,安装的指令为 sudo yum install -y gcc

在Ubuntu下,安装的指令为 sudo apt install -y gcc

编译器gcc/g++的使用

gcc和g++的使用方法很类似,因为它们的选项基本一样。

● -E,在预处理结束后停止编译过程。

● -S,编译完成就停下。

● -c,汇编完成就停下。

● -g,生成调试信息。

编译器优化选项的4个级别:

● -O0

● -O1

● -O2

● -O3

其中,-O0表示没有优化,-O1为缺省值,-O3的优化级别最高。

其他选项:

● -w,不生成任何警告信息。

● -Wall,生成所有警告信息。

下面,我们来练练手。

1)将test.c进行预处理,生成test.i文件。

我们打开test.i瞅一眼。

2)将test.i进行编译生成test.s文件。

 

我们打开test.s看看。

可以看到,已经变成汇编指令了。

3)将test.s进行汇编生成test.c文件。

 

当我们在打开test.o时,会发现我们已经看不懂了,汇编指令已经被转换成机器可识别的二进制代码。

4)-g选项有无的对比

我们可以看到,加了-g选项生成的_g_test文件要比没加-g选项生成的test文件要大,这是因为_g_test文件里包含了调试信息,而test中没有包含。 

调试器gdb的使用

程序的发布方式有两种,debug模式和release模式,gcc/g++直接编译出来的二进制程序,默认是release模式。如果我们要使用gdb调试,就必须在编译的时候加上-g选项。至于-g选项怎么加,上面已经演示过了。下面我们正式进入gdb的使用。

指令:gdb code   / /打开code进行调试 

● ctrl + d 或 quit,退出调试。

● list 或 l 行号,以所指定行号为中心显示源代码,一次10行。

● list 或 l 函数名,列出指定函数的源代码。

● run 或 r,运行程序。

● n 或 next,逐过程调试(不会进入函数内部)。

● s 或step,逐语句调试(会进入函数内部)。 

● b 或 break 行号,在指定行设置断点。

● break 函数名,在指定函数开头设置断点。

● info break,查看断点信息。

● finish,执行当前函数,然后停下。

● p 变量,打印变量的值。

● set var,修改变量的值。

● c 或continue,从当前位置开始运行。

● delete breakpoints,删除所有断点。

● d n,删除序号为n的断点。

● delete breakpoints,删除所有断点。

● disable breakpoints,禁用所有断点。

● disable breakpoint n,禁用n号断点。

● enable breakpoints,启用所有断点。

● enable breakpoint n,启用n号断点。

● info b,查看所有断点信息。

● until 行号,跳到指定行。

● display 变量名,跟踪查看一个变量,每次停下来都显示它的值。

● undisplay,取消对先前设置的变量的跟踪。 

cgdb 

cgdb是gdb的一个图形界面版本,它具有gdb的所有功能,相较于gdb,cgdb便于我们查看源代码。

CentOS下,安装指令 sudo yum install -y cgdb。

Ubuntu下,安装指令 sudo apt install -y cgdb。

用法:cgdb 文件,例如,cgdb code。

条件断点

通过前面的学习,我们已经掌握了如何打断点,现在我们来学习如何打条件断点。

关键字:condition

语法:condition 断点编号 条件

下面举个简单的例子。

上述设置的条件断点的意思是:如果a等于20就停下来,否则不停下。我们可以看到,在运行起来后,程序停在了第12行,也就是说跳过了第一个断点,因为a不等于20,导致条件断点没生效。


本文到这就结束啦~如有错误,请您不吝指出! 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com