赞
踩
启动
1、 gdb < program >
program也就是你的执行文件, 一般在当然目录下。
2、 gdb < program > core
用gdb同时调试一个运行程序和core文件, core是程序非法执行后core dump后产生的文件。
3、 gdb < program > < PID>
如果你的程序是一个服务程序, 那么你可以指定这个服务程序运行时的进程ID。 gdb会自动attach上去, 并调试他。
program应该在PATH环境变量中搜索得到。
GDB样貌:help查看帮助信息
GDB同样可以TAB提示:如
敲入b按两次TAB键, 你会看到所有b打头的命令:
(gdb) b
backtrace break bt
(gdb)
只记得函数的前缀, 可以这样:
(gdb) b make_ <按TAB键>
( 再按下一次TAB键, 你会看到:以make开头的全部函数)
当以gdb < program>方式启动gdb后, gdb会在PATH路径和当前目录中搜索< program>的源文件。 如要确认gdb是否读到源文
件, 可使用l或list命令, 看看gdb是否能列出源代码。
在gdb中, 运行程序使用r或是run命令。 程序的运行, 有可能需要设置下面四方面的事。
1、 程序运行参数。
set args 可指定运行时参数。( 如: set args 10 20 30 40 50)
show args 命令可以查看设置好的运行参数。
2、 运行环境。
path < dir> 可设定程序的运行路径。
show paths 查看程序的运行路径。
set environment varname [=value] 设置环境变量。如: set env USER=hchen
show environment [varname] 查看环境变量。
3、 工作目录。
cd < dir> 相当于shell的cd命令。
pwd 显示当前的所在目录。
4、 程序的输入输出。
info terminal 显示你程序用到的终端的模式。
使用重定向控制程序输出。如: run > outfile
tty命令可以指写输入输出的终端设备。如: tty /dev/ttyb
退出
quit
(1)断点
break
在进入指定函数时停住。C++中可以使用class::function或function(type,type)格式来指定函数名。
break
在指定行号停住。
break +offset
break -offset
在当前行号的前面或后面的offset行停住。 offiset为自然数。
(2)设置- -
watch
为表达式( 变量) expr设置一个观察点。 一量表达式值有变化时, 马上停住程序。
rwatch
当表达式( 变量) expr被读时, 停住程序。
awatch
当表达式( 变量) 的值被读或被写时, 停住程序。
info watchpoints
列出当前所设置了的所有观察点。
catch
当event发生时, 停住程序。
(2)停止
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自动删除。
调试
continue [ignore-count]
c [ignore-count]
fg [ignore-count]
单步调试
跳转执行
jump < linespec>
指定下一条语句的运行点。< linespce>可以是文件的行号, 可以是file:line格式, 可以是+num这种偏移量格式。 表式着
下一条运行语句从哪里开始。
jump < address>
这里的< address>是代码行的内存地址。
查看
bt
list < linenum>
显示程序第linenum行的周围的源程序。
list < function>
显示函数名为function的函数的源程序。
list
显示当前行后面的源程序。
list -
list +
list < first>, < last>
info registers
查看寄存器的情况。( 除了浮点寄存器)
info all-registers
查看所有寄存器的情况。( 包括浮点寄存器)
info registers <regname …>
查看所指定的寄存器的情况
变量
(1)变量
查看以下三种变量的值:
1、 全局变量( 所有文件可见的)
2、 静态全局变量( 当前文件可见的)
3、 局部变量( 当前Scope可见的)
如果你的局部变量和全局变量发生冲突( 也就是重名), 一般情况下是局部变量会隐藏全局变量, 也就是说, 如果一个
全局变量和一个函数中的局部变量同名时, 如果当前停止点在函数中,用print显示出的变量的值会是函数中的局部变量
的值。 如果此时你想查看全局变量的值时, 你可以使用“ ::” 操作符:
file::variable
function::variable
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。