gdb 断点示例 – 设置、查看、继续和删除断点

举报
Tiamo_T 发表于 2022/08/16 16:09:48 2022/08/16
【摘要】 Gdb 是调试 C 程序的必备工具。断点是告诉 GDB 在特定行、函数或地址处停止或暂停程序执行的方法。一旦程序停止,您可以检查和更改变量值,从该断点继续执行程序等。如果您是 GDB 新手,您应该首先了解如何使用 GDB 调试 C 程序的基础知识。本教程将使用以下代码通过示例来描述 gdb 断点。#include <stdio.h>int power(int,int);int main() ...

Gdb 是调试 C 程序的必备工具。

断点是告诉 GDB 在特定行、函数或地址处停止或暂停程序执行的方法。一旦程序停止,您可以检查和更改变量值,从该断点继续执行程序等。

如果您是 GDB 新手,您应该首先了解如何使用 GDB 调试 C 程序的基础知识。

本教程将使用以下代码通过示例来描述 gdb 断点。

#include <stdio.h>

int power(int,int);

int main() {

        int i;
        printf("Program to calculate power\n");
        for (i=0;i<10;i++)
                printf("%d %d\n",i, power(2,i));
        return 0;
}

int power (int base, int n) {

        int i,p;
        p=1;
        for (i=1; i<=n; i++)
                p = p*base;
        return p;
}

# cc -g power.c

现在您有一个可执行文件,它计算 0-9 的以 2 为底的幂。

1. 如何在函数处设置断点

# gdb
(gdb) file ./a.out
Reading symbols from /home/lakshmanan/a.out...done.

(gdb) b power
Breakpoint 1 at 0x40055d: file power.c, line 16.

(gdb) run
Starting program: /home/lakshmanan/./a.out 
Program to calculate power

Breakpoint 1, power (base=2, n=0) at power.c:17
17		p=1;

我们在函数电源处设置断点并运行程序。程序将继续执行,直到函数调用 power()。一旦遇到该函数,程序将停止。

2. 获取传递给函数的参数信息

要知道传递给函数的参数,请使用“info args”。

(gdb) info args
base = 2
n = 0

3.获取局部变量的信息

要了解有关此函数(当前堆栈帧)中可访问的局部变量的信息,请使用“info locals”。


(gdb) info locals
i = 32767
p = -7840

4. 继续执行程序直到下一个断点

要继续程序直到出现下一个断点,请使用“继续”。

(gdb) continue 
Continuing.
0 1

Breakpoint 1, power (base=2, n=1) at power.c:16
16		int i=0,p=1;

一旦我们给出“继续”,幂函数就会被执行并打印结果。从'main()' for 循环再次调用了相同的幂函数,因此程序再次停止。

5. 获取所有断点的信息

您可以使用“信息断点”了解有关断点的信息。

(gdb) info breakpoints 
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x00000000004005a7 in power at power.c:16
	breakpoint already hit 2 times

现在我们只设置了一个断点,并显示了有关断点的信息。

6.删除现有断点

要删除现有断点,请使用“删除断点”

(gdb) delete breakpoints 1

(gdb) info breakpoints 
No breakpoints or watchpoints.

现在我们已经删除了 power 函数中存在的断点。

7.设置临时断点

有时您可能只想在某一点停止程序一次。您可以为此使用临时断点。临时断点只会停止程序一次,然后将其删除。

(gdb) tbreak power
Temporary breakpoint 3 at 0x4005a7: file power.c, line 16.

(gdb) info breakpoints 
Num     Type           Disp Enb Address            What
3       breakpoint     del  y   0x00000000004005a7 in power at power.c:16

(gdb) continue 
Continuing.
1 2

Temporary breakpoint 3, power (base=2, n=2) at power.c:16
16		int i=0,p=1;

(gdb) info breakpoints 
No breakpoints or watchpoints.
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。