从网上找到并整理的。
----------------------------------------------------------------------------------------分割线-----------------------------------------------------------------------------------
一个简单的例子
- 编译生成可执行文件 gcc -g test.c -o test
- 启动gdb
- 查看程序
- 在main函数处设置断点
- 运行程序
- 单步运行,跟踪到代码内部
- 继续运行,不跟踪到代码内部
- 运行程序直到当前函数结束
- 对指定的变量进行监控
- 查看指定变量值
- 设置断点
- 终止调试的程序
- 退出gdb
break命令
break +OFFSET & break -OFFSET
break LINENUM
break FILENAME:LINENUM
break FILENAME:
break *ADDRESS
break
break ... if COND
ignore BNUM COUNT'
tbreak(tb) ARGS
hbreak ARGS
thbreak ARGS
rbreak REGEX
info breakpoints [N]
info break [N]
info watchpoints [N]
*Breakpoint Numbers*----断点号
*Type*----断点类型(断点或是观察点)
*Disposition*---显示断点的状态
*Enabled or Disabled*---使能或不使能。'y'表示使能,'n'表示不使能。
*Address*----地址,断点在你程序中的地址(内存地址)
*What*---地址,断点在你程序中的行号。
假如断点是条件断点,此命令还显示断点所需要的条件。
带参数N的'info break'命令只显示由N指定的断点的信息。
此命令还显示断点的运行信息(被执行过几次),这个功能在使用'ignore'
命令时很有用。你可以'ignore'一个断点许多次。使用这个命令可以查看断点
被执行了多少次。这样可以更快的找到错误。
maint info breakpoints
断点的含义:
breakpoint:断点,普通断点
watchpoint:普通观察点
longjmp:内部断点,用于处理'longjmp'调用
longjmp resume:内部断点,设置在'longjmp'调用的目标上
until:'until'命令所使用的内部断点
finish:finish'命令所使用的内部断点
watch命令
rwatch EXPR
awatch EXPR
info watchpoints
在多线程的程序中,观察点的作用很有限,GDB只能观察在一个线程中的表达式的值。假如你确信表达式只被当前线程所存取,那么使用观察点才有效。GDB不能注重一个非当前线程对表达式值的改变。
catch EXCEPTIONS 命令
使用这个命令在一个被激活的异常处理句柄中设置断点。EXCEPTIONS是一个你要抓住的异常。你一样可以使用'info catch'命令来列出活跃的异常处理句柄。
GDB中对于异常处理由以下情况不能处理:
* 假如你使用一个交互的函数,当函数运行结束时,GDB将象普通情况一样把控制返回给你。假如在调用中发生了异常,这个函数将继续运行直到碰到一个断点,一个信号 或是退出运行。* 你不能手工产生一个异常( 即异常只能由程序运行中产生 )
* 你不能手工设置一个异常处理句柄。
有时'catch'命令不一定是调试异常处理的最好的方法。假如你需要知道异常产生的确切位置,最好在异常处理句柄被调用以前设置一个断点,这样你可以检查栈的内容。 假如你在一个异常处理句柄上设置断点,那么你就不轻易知道异常发生的位置和原因。 要仅仅只在异常处理句柄被唤醒之前设置断点,你必须了解一些语言的实现细节。
enable 断点编号
恢复暂时失活的断点,要恢复多个编号的断点,可用空格将编号分开
disable 断点编号
使断点失效,但是断点还在
delete 断点编号或表达式
删除某断点
clear 断点所在行号
清除某断点
display 变量
每次运行到断点就显示变量的值,用于观察变量的变化
set 命令
这个命令用来为你的程序设置一个运行环境(使用一个表达式)。用不带任何参变量的'set'命令可以显示所有可以设置的变量的值。
set prompt $把gdb的提示符设为$.
set args 可指定运行时参数。(如:set args 10 20 30 40 50)
show args 命令可以查看设置好的运行参数。
show 命令
show命令用来显示gdb自身的状态。
使用'set'命令可以改变绝大多数由'show'显示的信息
使用show radix命令来显示基数
有三个变量是不可以用'set'命令来设置的:
show version显示gdb的版本号
show copying显示版权信息
show warranty显示担保信息