gdb 断点示例 – 设置、查看、继续和删除断点
【摘要】 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)