在gdb中,如果觉得设置的断点已经没有用处了,可以使用delete clair disable|enable 对断点进行操作
clear 清除所有的已定义的停止点。clear <function>,clear <filename:function> 清除所有设置在函数上的停止点。clear <linenum>,clear <filename:linenum> 清除所有设置在指定行上的停止点。delete [breakpoints] [range...] 删除指定的断点,breakpoints为断点号。如果不指定断点号,则表示删除所有的断点。range 表示断点号的范围(如:3-7)。其简写命令为d。
比删除更好的方法是disable停止点,disable了的停止点,GDB不会删除,当你还需要时,enable即可.
disable [breakpoints] [range...]disable所指定的停止点,breakpoints为停止点号。如果什么都不指定,表示disable所有的停止点。简写命令是dis.enable [breakpoints] [range...]enable所指定的停止点,breakpoints为停止点号。enable [breakpoints] once range...enable所指定的停止点一次,当程序停止后,该停止点马上被GDB自动disable。enable [breakpoints] delete range...enable所指定的停止点一次,当程序停止后,该停止点马上被GDB自动删除。
在前面一篇文章提到,可以使用b <function_name> if condition 来设置条件断点,当条件成立时,程序自动停止;
同时我们可以使用condition命令来修改条件(只有break和watch命令支持if,catch目前暂不支持if);
condition <bnum> <expression> 修改断点号为bnum的停止条件为expression。condition <bnum> 清除断点号为bnum的停止条件。还有一个比较特殊的维护命令ignore,你可以指定程序运行时,忽略停止条件几次。ignore <bnum> <count> 表示忽略断点号为bnum的停止条件count次。为停止点设置运行命令
我们可以使用gdb提供的command 来为停止点处设置运行命令,即当程序运行到断点处时,会自动运行先前使用command来设置的命令,这样很方便来进行自动化调试;
commands [bnum]... command-list ...end
为断点号bnum指写一个命令列表。当程序被该断点停住时,gdb会依次运行命令列表中的命令。
例如:
break foo if x>0commandsprintf "x is %d\n",xcontinueend
当程序运行到断点处时,程序被挺住,这时可以使用continue命令使程序继续运行,next或者step命令进行单步跟踪
continue [ignore-count]c [ignore-count]fg [ignore-count]
恢复程序运行,直到程序结束,或是下一个断点到来。ignore-count表示忽略其后的断点次数
step
单步跟踪,如果有函数调用,他会进入该函数。进入函数的前提是,此函数被编译有debug信息,后面可以加count也可以不加,不加表示一条条地执行,加表示执行后面的count条指令,然后再停住
set step-mode,set step-mode on
打开step-mode模式,于是,在进行单步跟踪时,程序不会因为没有debug信息而不停住。这个参数有很利于查看机器码
next
单步运行count 条指令,count默认值为1
finish
运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息。
until
可以运行程序直到退出循环体
stepi 或 si,nexti 或 ni
单步跟踪一条机器指令!一条程序代码有可能由数条机器指令完成,stepi和nexti可以单步执行机器指令
联系客服