首页 > 代码库 > gdb学习-checkpoint,watch
gdb学习-checkpoint,watch
checkpoint的内容参考:
http://blog.chinaunix.net/uid-23629988-id-2943273.html
这一篇主要是checkpoint,在next之前加checkpoint命令,然后就可以用 restart 1 来恢复到之前的checkpoint,可以避免从头再来。
用 info checkpoints 可以看到所有的checkpoints。
好像也能看到breakpoint的
(gdb) info checkpoints * 1 process 2060 at 0x80483e7, file test.c, line 33 0 process 2059 (main process) at 0x80483f7, file test.c, line 35
watch看
http://simohayha.iteye.com/blog/493091
watch是监测变量改变。watch expr [thread threadno] 是只针对这个线程对变量的改变。
rwatch是针对变量被读; awatch是针对变量被改变或者被读。
break是断点
tbreak是一次性的断点。
break location if condition 是condition为真的时候,到达这个location才会生效。
rbreak是带有regex的断点。
catch event是当事件发生的时候,会生效,
这些事件包括了:throw, catch, exception, exception unhandled, assert, exec, fork, vfork等。
tcatch指一次性的catch.
一个断点(包括 watchpoint和catchpoint)可以有下面四种状态. :
打开,关闭,enabled once,enabled for deletion
分别对应下面的:
disable [breakpoints][range..] 关闭指定的断点或者全部断点(如果没有range)
enable [breakpoints][range..] 打开指定的断点或者全部断点(如果没有range)
enable [breakpoints] once range 临时打开指定的断点(也就是说是一次性的,.
enable [breakpoints] delete range 临时打开指定的断点并只工作一次,也就是一次之后这个断点将会被删除.
clear删除断点,
clear location, 最常用的是:
clear function, clear file:function, clear linenum, clear file:linenum.
clear与delete的区别,clear是给出行号或者函数,而delete是给出断点编号。
condition除了跟在break后面,也是可以单独作为命令使用的:break condition
contidition bnum expression 当expression为真的时候,程序到达这个断点才会停止.
contidition bnum 从断点bnum删除掉一个condition.
ignore bnum count 设置一个断点bnum的忽略次数为count.也就是只有count次数后,这个断点才会起作用.
break里面还可以带上一串命令:
break 403 commands ///不输出任何东西 silent ///改变x的值 set x = y + 4 ///然后continue cont end
用commands + end 来实现
step [count]
加count,是step多次,如果遇到断点会停止。
next [count]
和step很类似,区别就是不会跟进函数。
step的行为通过step-mode来控制:
- set step-mode
- set step-mode on
- set step-mode off
on就可以使step停止在没有debug信息的函数的第一条指令上。off则是直接执行完这个函数。
这里要注意上面的命令都只是跳一行代码。而不是一条指令。
stepi是执行指令。nexti也是。
gdb可以监测在你的程序中的任何信号。
gdb学习-checkpoint,watch