-
GDB print和display命令 查视变量的值
所属栏目:[语言] 日期:2022-07-12 热度:185
前面章节中提到,使用 GDB 调试程序,最常用的方法是:单步调试或者断点调试程序,期间通过查看某个变量或者表达式的值,判断当前程序的执行过程是否正确,不断缩小异常或 Bug 位于代码中的范围,最终找到并修复。 对于在调试期间查看某个变量或表达式的值,[详细]
-
GDB禁用与删除断点
所属栏目:[语言] 日期:2022-07-12 热度:138
我们知道,GDB 调试器支持 3 种断点,分别为普通断点(用 break 命令创建)、观察断点(用 watch 命令建立)以及捕捉断点(用 catch 命令建立)。并且如果需要的话,我们可以在被调试程序中打多个断点,甚至于 GDB 允许在同一位置打多个断点。 这就产生一个[详细]
-
GDB handle命令 信号处置
所属栏目:[语言] 日期:2022-07-12 热度:158
C、C++ 程序中,信号常常作为进程间通信的一种重要手段。举个例子: #include stdio.h #include unistd.h #include signal.h void display(){ printf(http://c.biancheng.net/gdb/); } int main () { pid_t cpid; pid_t ppid; signal(SIGINT,display); if((c[详细]
-
GDB frame和backtrace命令 检查栈信息
所属栏目:[语言] 日期:2022-07-12 热度:185
当程序因某种异常停止运行时,我们要做的就是找到程序停止的具体位置,分析导致程序停止的原因。 对于 C、C++ 程序而言,异常往往出现在某个函数体内,例如 main() 主函数、调用的系统库函数或者自定义的函数等。要知道,程序中每个被调用的函数在执行时,都[详细]
-
GDB编辑及搜索源码
所属栏目:[语言] 日期:2022-07-12 热度:154
本节主要讲解的是在 GDB 内对源文件中的代码进行修改和查找,分别对应 GDB 中的 edit 命令和 search 命令,下面是对这两个命令的详细介绍。 GDB edit命令:编辑文件 在 GDB 中编辑源文件中使用 edit 命令,该命令的语法格式如下: (gdb) edit [location] (gd[详细]
-
GDB help命令 查看目标命令的详细用法
所属栏目:[语言] 日期:2022-07-12 热度:100
截止到本节,我们接触了大量的 GDB 命令,甚至很多命令还拥有不同的语法格式和参数。这就产生一个问题,如何才能记住它们呢? 实际上,GDB 调试器的开发人员也想到了这个问题。为了降低用户使用 GDB 调试器的学习成本,GDB 提供了 help 命令,它可以帮用户打[详细]
-
Makefile文件中包括哪些规则
所属栏目:[语言] 日期:2022-07-11 热度:193
想要书写一个完整的 Makefile文件,需要了解 Makefile 的相关的书写规则。我们已经知道了 Makefile 描述的是文件编译的相关规则,它的规则主要是两个部分组成,分别是依赖的关系和执行的命令,其结构如下所示: targets : prerequisites command 或者是 targ[详细]
-
Makefile的工作进程
所属栏目:[语言] 日期:2022-07-11 热度:139
简单了解一下 Makefile 书写规则之后,再来深入研究一下 Makefile 的是怎样工作的?当我们在执行 make 条命令的时候,make 就会去当前文件下找要执行的编译规则,也就是 Makefile 文件。我们编写 Makefile 的时可以使用的文件的名称 GNUmakefile 、makefile[详细]
-
Makefile通配符的利用
所属栏目:[语言] 日期:2022-07-11 热度:154
Makefile 是可以使用 shell 命令的,所以 shell 支持的通配符在 Makefile 中也是同样适用的。 shell 中使用的通配符有:*,?,[...]。具体看一下这些通配符的表示含义和具体的使用方法。 通配符 使用说明 * 匹配0个或者是任意个字符 ? 匹配任意一个字符 [][详细]
-
Makefile变量的定义和运用
所属栏目:[语言] 日期:2022-07-11 热度:72
变量对于我们来说是不陌生的,在学习各种编程语言时会经常用到。就拿C语言来说,变量的使用是十分常见的,变量可以用来保存一个值或者是使用变量进行运算操作。Makefile 中的变量也是这样,我们可以利用它来表示某些多处使用而又可能发生变化的内容,不仅可[详细]
-
Makefile自主化变量
所属栏目:[语言] 日期:2022-07-11 热度:165
关于自动化变量可以理解为由 Makefile 自动产生的变量。在模式规则中,规则的目标和依赖的文件名代表了一类的文件。规则的命令是对所有这一类文件的描述。我们在 Makefile 中描述规则时,依赖文件和目标文件是变动的,显然在命令中不能出现具体的文件名称,[详细]
-
Makefile目标文件搜寻 VPATH和vpath
所属栏目:[语言] 日期:2022-07-11 热度:98
我们都知道一个工程文件中的源文件有很多,并且存放的位置可能不相同(工程中的文件会被放到不同的目录下),所以按照之前的方式去编写 Makefile 会有问题。 我们之前列举的例子,所有的源文件基本上都是存放在与 Makefile 相同的目录下。只要依赖的文件存在[详细]
-
Makefile路径搜索使用示例
所属栏目:[语言] 日期:2022-07-11 热度:159
我们了解了一下路径搜索的使用方式,我们再来看一下具体的使用方法。 为了体验实例的效果的更加明显,我们按照源代码树的布局来放置文件。我们把源代码放置在src目录下,包含的文件文件是:list1.c、list2.c、main.c 文件,我们把头文件包含在 include 的目[详细]
-
Makefile隐含准则
所属栏目:[语言] 日期:2022-07-11 热度:200
这个章节讲述的是 Makefile 的隐含规则,所谓的隐含规则就是需要我们做出具体的操作,系统自动完成。编写 Makefile 的时候,可以使用隐含规则来简化Makefile 文件编写。 实例: test:test.o gcc -o test test.o test.o:test.c 我们可以在 Makefile 中这样写[详细]
-
Makefile ifeq ifneq ifdef和ifndef 条件判别
所属栏目:[语言] 日期:2022-07-11 热度:155
日常使用 Makefile 编译文件时,可能会遇到需要分条件执行的情况,比如在一个工程文件中,可编译的源文件很多,但是它们的类型是不相同的,所以编译文件使用的编译器也是不同的。手动编译去操作文件显然是不可行的(每个文件编译时需要注意的事项很多),所[详细]
-
Makefile伪标准
所属栏目:[语言] 日期:2022-07-11 热度:131
这一个章节我们主要讲的是 Makefile 中的伪目标。所谓的伪目标可以这样来理解,它并不会创建目标文件,只是想去执行这个目标下面的命令。伪目标的存在可以帮助我们找到命令并执行。 使用伪目标有两点原因: 避免我们的 Makefile 中定义的只执行的命令的目标[详细]
-
Java抽象 abstract 类
所属栏目:[语言] 日期:2022-07-11 热度:166
Java 语言提供了两种类,分别为具体类和抽象类。前面学习接触的类都是具体类。这一节介绍一下抽象类。 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的[详细]
-
Java接口 Interface 的定义和实现
所属栏目:[语言] 日期:2022-07-11 热度:62
抽象类是从多个类中抽象出来的模板,如果将这种抽象进行的更彻底,则可以提炼出一种更加特殊的抽象类接口(Interface)。接口是 Java 中最重要的概念之一,它可以被理解为一种特殊的类,不同的是接口的成员没有执行体,是由全局常量和公共的抽象方法所组成。[详细]
-
Java内部类是什么
所属栏目:[语言] 日期:2022-07-11 热度:121
在类内部可定义成员变量和方法,且在类内部也可以定义另一个类。如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类(或称为嵌套类),而类 Outer 则称为外部类(或称为宿主类)。 内部类可以很好地实现隐藏,一般的非内部类是不允许有 pr[详细]
-
Java实例内部类
所属栏目:[语言] 日期:2022-07-11 热度:89
实例内部类是指没有用 static 修饰的内部类,有的地方也称为非静态内部类。示例代码如下: public class Outer { class Inner { // 实例内部类 } } 上述示例中的 Inner 类就是实例内部类。实例内部类有如下特点。 1)在外部类的静态方法和外部类以外的其他类[详细]
-
Java静态内部类
所属栏目:[语言] 日期:2022-07-11 热度:64
静态内部类是指使用 static 修饰的内部类。示例代码如下: public class Outer { static class Inner { // 静态内部类 } } 上述示例中的 Inner 类就是静态内部类。静态内部类有如下特点。 1)在创建静态内部类的实例时,不需要创建外部类的实例。 public cla[详细]
-
Java局部内部类
所属栏目:[语言] 日期:2022-07-11 热度:177
局部内部类是指在一个方法中定义的内部类。示例代码如下: public class Test { public void method() { class Inner { // 局部内部类 } } } 局部内部类有如下特点: 1)局部内部类与局部变量一样,不能使用访问控制修饰符(public、private 和 protected)[详细]
-
Java匿名类 Java匿名内部类
所属栏目:[语言] 日期:2022-07-11 热度:79
匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。其语法形式如下: new 类或接口() { // 类的主体 }; 这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。使用匿名类可使代码更加简洁、紧凑,模块[详细]
-
Java8新特性 Effectively final
所属栏目:[语言] 日期:2022-07-11 热度:154
Java 中局部内部类和匿名内部类访问的局部变量必须由 final 修饰,以保证内部类和外部类的数据一致性。但从 Java 8 开始,我们可以不加 final 修饰符,由系统默认添加,当然这在 Java 8 以前的版本是不允许的。Java 将这个功能称为 Effectively final 功能。[详细]
-
Java Lambda表达式的使用
所属栏目:[语言] 日期:2022-07-11 热度:186
在《Java Lambda表达式》和《Java Lambda表达式的3种简写方式》一节中我们了解了 Java Lambda 的概念并可以在匿名类的场合使用 Lambda 语法进行简单替换。本节主要介绍在 Java 中如何使用 Lambda 表达式。 作为参数使用Lambda表达式 Lambda 表达式一种常见的[详细]