使用 awatch rwatch 示例的 GDB 断点和观察点
在本文中,我们将介绍几个高级 GDB 函数,包括条件断点和观察点。
我们还使用一个简单的 C 程序作为示例来解释这些 GDB 调试器概念。
GDB 条件断点
断点,每次程序到达特定位置时都会刹车。您还可以指定断点的条件。条件是一个布尔表达式。只有当布尔表达式的计算结果为 TRUE 时,条件断点才会中断。
假设您正在 for 循环中调用一个函数,并且每 500 次,程序就会就会崩溃。在这些情况下,条件断点会派上用场,您可以设置条件并仅在条件匹配时才中断执行。
#include <stdio.h>
int main() {
int i=0;
for (i=0;i<1000;i++) {
printf("%d\n",i);
}
}
(gdb) b 8 if i=500
Breakpoint 2 at 0x400524: file a.c, line 8.
(gdb) run
Starting program: /home/lakshmanan/./a.out
Breakpoint 1, main () at a.c:6
6 int i=0;
(gdb) c
Continuing.
Breakpoint 2, main () at a.c:8
8 printf("%d\n",i);
(gdb) p i
$1 = 500
在上面的 gdb 会话中,当 i 的值为 500 时程序会中断。
什么是观察点?
Watchpoint 类似于我们在之前的GDB – Breakpoints文章中讨论的断点。但与为函数或代码行设置的断点不同,观察点是在变量上设置的。当这些变量被读取/写入时,将触发观察点并且程序执行将停止。
请注意,您要监视的变量必须在当前范围内。因此,请确保在变量变量范围内设置断点来观察它。
#include <stdio.h>
int main() {
int a=10;
int b=15;
b = a+b;
printf("%d\n",b);
}
$ cc -g watch.c -o watch
使用“awatch”设置读/写观察点
使用 awatch 命令在变量变量上设置读/写观察点。awatch 的语法是 'awatch' 后跟变量名。
$ gdb ./watch
(gdb) break 1
Breakpoint 1 at 0x400514: file a.c, line 1.
(gdb) run
Starting program: /home/lakshmanan/Personal/./a.out
Breakpoint 1, main () at a.c:4
4 int a=10;
(gdb) awatch b
Hardware access (read/write) watchpoint 2: b
(gdb) n
5 int b=15;
(gdb) n
Hardware access (read/write) watchpoint 2: b
Old value = 0
New value = 15
main () at a.c:7
7 b = a+b;
(gdb) n
Hardware access (read/write) watchpoint 2: b
Old value = 15
New value = 25
main () at a.c:9
9 printf("%d\n",b);
在上面的例子中,每当给定变量被读/写时,gdb 都会打印旧值和新值并停止程序的执行。
使用“rwatch”为变量设置读取观察点
rwatch 是用于在 gdb 中设置读取观察点的命令。一旦设置,每当读取给定变量时,程序将停止执行。语法类似于'awatch'。
(gdb) rwatch b
Hardware read watchpoint 2: b
(gdb) c
Continuing.
Hardware read watchpoint 2: b
Value = 25
0x000000000040052b in main () at a.c:9
9 printf("%d\n",b);
同样,您可以使用 'watch' 'watch' 在 gdb 中设置写入观察点。
删除观察点
观察点将显示在断点列表中。
因此,您可以使用 info 断点列出观察点,并且您可以删除/禁用类似于断点,如下所示。
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x0000000000400514 in main at a.c:1
breakpoint already hit 1 time
2 hw watchpoint keep y b
breakpoint already hit 1 time
(gdb) delete 2
- 点赞
- 收藏
- 关注作者
评论(0)