当前课程知识点:嵌入式系统设计 >  第四章:嵌入式软件开发平台 >  4.3 GDB 调试器 >  Video

返回《嵌入式系统设计》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《嵌入式系统设计》慕课在线视频列表

Video课程教案、知识点、字幕

默认情况下

GCC在编译的时候不会将调试符号插入到生成的二进制代码中

因此,为了调试的话,我们必须加入相应的选项

在GCC中,就要使用到-g或者-ggdb选项,其中-g选项呢

它是以操作系统本地格式产生调试信息

所有的调试器都可以使用这个调试信息

如果是用-ggdb,那么这个时候

GCC只是为GDB生成扩展调试信息,此时不能用其他的调试器

下面来看一下调试编译选项对我们生成文件的影响

第一种情况我们不加调试选项,就是这里没有加上选项

那么我们编译生成的文件大小是7372

如果加上-g1,第一级的调试选项

它生成的文件大小是8112

如果是-g2呢,就是8448,如果是-g3,就是27744

可以看到这个随着调试级别的增加,它的文件大小也是增加的

这就是由于增加了调试信息在文件里面的原因

当使用调试编译选项编译好之后

就可以用GDB来对这个生成的程序进行调试

在命令行下面输入这样一个命令,它就会进入GDB的调试状态

首先给出的是相关的软件信息,那么进入GDB之后

我们通过执行一些命令,就可以完成相关的调试

这些命令主要分成以下几类

第一类:和工作环境相关

第二类:设置断点与恢复命令

第三类:可以查看源代码

第四类:可以查看运行数据以及修改运行参数

下面分别来看一下这几类的细节:

第一类,工作环境命令,set它就是设置运行的参数,

show就是查看参数,还有path还有cd等等都是和目录相关的

此外还有一个pwd这个显示当前工作目录

第二类是设置断点与恢复命令

第一个info b那就是查看设置的断点

第二个是break设置断点

还有delete删除断点

这些命令大部分都可以用第一个字母来代替

比如说设置断点就是b 3就是在第三行设置断点

此外我们还有相关的断点运行恢复命令,就是有step、next、finish、c

step可以看到,它是单步恢复程序运行,要进入函数调用

next是单步执行但不进入函数调用,这两个是有区别的

我们后面在例子中会看到

finish是直到当前函数完成

c是继续执行函数,直到函数结束或者是遇到新断点

再下一类,源代码查看命令,常见的就是List

我们要查看对应的源代码

file就是加载指定的文件

info line就是显示加载对应行的代码

还有查看运行数据或修改运行参数的命令

其中print就是查看对应表达式和变量的值

这个是最常见的

下面我们来看一下上面这些命令的应用

第一个,list,就是列出我们的源文件,后面附上行的参数

大家可以看一下,我们用到的这个GDB test这个源文件就是这样

包括一个主函数,一个乘法子函数

如果要设置断点,我们就可以用b后面跟上在某一行的标号

我们用b 7的话就马上会在第7行设置一个断点

此外我们还可以用函数的名字来设置断点

比如说我们在这个乘法子函数设置断点,那么是在第五行

当设置完断点之后我们可以看断点的信息就是info b

刚才设置的断点信息都显示出来

这里一种新的断点设置方法是条件设置

如果i=5我们就在第7行设置一个断点

新设置断点的信息已经设置好了

只有在满足这个条件下,它才会中断

当我们运行的时候,可以看到当i=5的时候,这个时候它才会停止

再看一下查看变量的这个命令,就是 p i

当我们运行的某个断点要查看对应内容的时候,我们就p i

i这个变量的内容呢当前是5

也就是我们刚才要i=5的时候断点才会停止

所以说i=5,注意这里是一个变量的代号而不是打印出i

再下,我们看一下单步运行的区别

首先我们设置到断点之后,然后敲入r

整个程序运行,运行到断点处它就会停止

比如我们的断点是设置在第22行,这个断点

那么在这里,就停止了

单步运行,我们可以用n,也可以s

n代表next,next就是直接运行下一步

注意在这个代码中有一个乘法的值,程序调用

由于我们的是next,不会进入这个函数

相反,我们用第二种方式单步运行

当运行的时候,用step,这个时候可以看到

运行进入了这个函数的内部

最后我们看一下恢复程序运行的命令c

当我们敲入c的时候,如果后面没有断点

那么整个程序就会运行到最后,给出结果

嵌入式系统设计课程列表:

第一章:嵌入式系统基础

-1.1 嵌入式系统概念

--Video

-第一章:嵌入式系统基础--1.1 嵌入式系统概念

-1.2 嵌入式系统组成

--Video

-第一章:嵌入式系统基础--1.2 嵌入式系统组成

第二章:嵌入式处理器

-2.1 嵌入式处理器发展历史

--Video

-第二章:嵌入式处理器--2.1 嵌入式处理器发展历史

-2.2 三星S3C2440 微处理器

--Video

-第二章:嵌入式处理器--2.2 三星S3C2440 微处理器

第三章:嵌入式操作系统

-3.1 嵌入式操作系统概述

--Video

-第三章:嵌入式操作系统--3.1 嵌入式操作系统概述

-3.2 嵌入式Linux 操作系统

--Video

-第三章:嵌入式操作系统--3.2 嵌入式Linux 操作系统

-3.3 Linux 操作系统实时性改造

--Video

-第三章:嵌入式操作系统--3.3 Linux 操作系统实时性改造

第四章:嵌入式软件开发平台

-4.1 基于Linux的开发流程

--Video

-第四章:嵌入式软件开发平台--4.1 基于Linux的开发流程

-4.2 GCC 编译器

--Video

-第四章:嵌入式软件开发平台--4.2 GCC 编译器

-4.3 GDB 调试器

--Video

-第四章:嵌入式软件开发平台--4.3 GDB 调试器

第五章:嵌入式Linux驱动开发

-5.1 Linux 设备驱动技术

--Video

-第五章:嵌入式Linux驱动开发--5.1 Linux 设备驱动技术

-5.2 Linux 设备驱动程序

--Video

-第五章:嵌入式Linux驱动开发--5.2 Linux 设备驱动程序

第六章:嵌入式系统实验

-实验一:基于ARM的嵌入式Linux开发环境建立

--Video

-第六章:嵌入式系统实验--实验一:基于ARM的嵌入式Linux开发环境建立

-实验二:基于ARM的模块方式驱动程序实验

--Video

-第六章:嵌入式系统实验--实验二:基于ARM的模块方式驱动程序实验

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。