设为首页 加入收藏

TOP

[原创]GDB调试指南-断点设置(一)
2019-02-27 20:08:42 】 浏览:119
Tags:原创 GDB 调试 指南 -断点 设置

前言

上篇《GDB调试指南-启动调试》我们讲到了GDB启动调试的多种方式,分别应用于多种场景。今天我们来介绍一下断点设置的多种方式。

为何要设置断点

在介绍之前,我们首先需要了解,为什么需要设置断点。我们在指定位置设置断点之后,程序运行到该位置将会“暂停”,这个时候我们就可以对程序进行更多的操作,比如查看变量内容,堆栈情况等等,以帮助我们调试程序。

查看已设置的断点

在学习断点设置之前,我们可以使用info breakpoints查看已设置断点:

1info breakpoints
2Num     Type           Disp Enb Address            What
31       breakpoint     keep y   0x00000000004005fc in printNum2 at test.c:17
4    breakpoint already hit time
52       hw watchpoint  keep y                      a
6    breakpoint already hit time
7    ignore next 
er">3 hits

它将会列出所有已设置的断点,每一个断点都有一个标号,用来代表这个断点。例如,第2个断点设置是一个观察点,并且会忽略三次。

断点设置

断点设置有多种方式,分别应用于不同的场景。借助示例程序进行一一介绍:

 1//test.c
2#include<stdio.h>
3void printNum(int a)
4{
5    printf("printNum\n");
6    while(a > 0)
7    {
8        printf("%d\n",a);
9        a--;
10    }
11}
12void printNum2(int a,int num)
13{
14    printf("printNum\n");
15    while(a > num && a>0)
16    {
17        printf("%d\n",a);
18        a--;
19    }
20}
21int div(int a,int b)
22{
23    printf("a=%d,b=%d\n",a,b);
24    int temp = a/b;
25    return temp;
26}
27int main(int argc,char *argv[])
28{
29    printNum2(12,5);
30    printNum(10);
31    div(10,0);
32    return 0;
33}

编译:

1gcc -g -o test test.c

注意,编译时需要带上-g参数,具体原因参见《GDB调试指南-启动调试》。

 


微信公众号【编程珠玑】:专注但不限于分享计算机编程基础,Linux,C语言C++,算法,数据库等编程相关[原创]技术文章,号内包含大量经典电子书和视频学习资源。欢迎一起交流学习,一起修炼计算机“内功”,知其然,更知其所以然。

 

根据行号设置断点

110  #break 可简写为b

或者

1test.c:10

程序运行到第10行的时候会断住。

根据函数名设置断点

同样可以将断点设置在函数处:

1b printNum

程序在调用到printNum函数的时候会断住。

根据条件设置断点

假设程序某处发生崩溃,而崩溃的原因怀疑是某个地方出现了非期望的值,那么你就可以在这里断点观察,当出现该非法值时,程序断住。这个时候我们可以借助gdb来设置条件断点,例如:

1break test.c:23 if b==0

当在b等于0时,程序将会在第23行断住。
它和condition有着类似的作用,假设上面的断点号为1,那么:

1condition 1 b==0

会使得b等于0时,产生断点1。而实际上可以很方便地用来改变断点产生的条件,例如,之前设置b==0时产生该断点,那么使用condition可以修改断点产生的条件。

根据规则设置断点

例如需要对所有调用printNum函数都设
编程开发网

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言数组越界导致死循环问题 下一篇江苏快三大小单双回血技巧公式推..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(217) }