Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1793093
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: LINUX

2012-03-30 17:19:20

断点有三种类型:

  1. breakpoint在程序到达某个特定的点时中断。
  2. watchpoint在一个变量或表达式的值发生改变时中断。
  3. catchpoint当一个特定的事件发生时中断。

对于breakpoint,有两种原因导致GDB没有停在设置中断点的位置。一、由于编译器的优化,代码在程序里没有对应的机器指令;二、不是所有的代码都会编译成机器指令,比如变量声明。通常这种情况下,程序会中断在离中断点最近的下方的有对应机器指令的源码行。

你设置的每个breakpoint、watchpoint和catchpoint都被赋予一个从1开始的编号。你使用这个编号来标识断点。

info breakpoints可以列出当前所有设置的断点。 也可以简写为i b。GDB里的命令都可以用首字母或前几个字母来简写。

info b
Num     Type           Disp Enb Address    What
1       breakpoint     keep y   0x0804865d in main at test_insert_sort.c:16
    breakpoint already hit 1 time
2       breakpoint     keep y   0x00131464
3       hw watchpoint  keep y              n

可以用disable n命令来禁掉编号为n的断点,用enable n命令重新启用断点

gdb> disable 2
gdb> i b
Num     Type           Disp Enb Address    What
1       breakpoint     keep y   0x0804865d in main at test_insert_sort.c:16
    breakpoint already hit 1 time
2       breakpoint     keep n   0x00131464
3       hw watchpoint  keep y              n

可以看到第2个断点已经被禁用了。


break n在当前文件的第n行设置断点,比如break 9。

break function在函数上设置断点。

break +n在当前行(中断时所在的行)的后n行加上断点。

break -n在当前行的前n行上加上断点。

break file:function在文件里的函数上加断点。

break *address在地址上加断点。

不带参数的break在当前行加上断点。


break可以选择性地中断,使用break n if ...的形式。比如 b 13 if i > 5,

5       breakpoint     keep y   0x080486d2 in main at test_insert_sort.c:27
    stop only if i>5




continue恢复中断程序的执行

tbreak可以设置一个临时的断点。它一旦被击中就会被删除,下次就不会再断在这个点上。

4       breakpoint     del  y   0x08048662 in main at test_insert_sort


ignore n count可以忽略第n个断点后的count个击中

2       breakpoint     keep n   0x00131464
    ignore next 1 hits


clear可以删除断点,是break的逆过程

clear *0x80483f4删除地址上的断点。

clear 4删除第4行的断点。

clear main删除main函数上的断点。

不带参数的clear会删除当前行的断点(中断的时候所在的行)。


delete也可以删除断点,但是它的参数是断点的编号,比如delete 5删除第5个断点。

不带编号的delete删除所有的断点。


finish可以运行当前函数,直到它返回。

阅读(2426) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~