分类: LINUX
2012-03-30 17:19:20
断点有三种类型:
对于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可以运行当前函数,直到它返回。