分类: C/C++
2012-08-09 16:58:24
打开调试选项
$gcc -g helloworld.c -o helloworld
$gdb helloworld
(gdb)l //list 查看所载入的文件
(gdb)b 6 //在6行上设置断点
(gdb)info b //查看设置断点情况,可设置多个断点
(gdb)r //run,可在r后面加上行号指定
(gdb)p n //查看变量值,p+变量值
(gdb)n //next,不会进入该函数
(gdb)s //step in,会进入该函数
(gdb)c //continue,把剩余未执行的执行完
gdb命令
file 装入要调试的可执行文件
kill 终止正在调试的程序.
list 列出产生执行文件的源代码的一部分.
next 执行一行源代码但不进入函数内部.
step 执行一行源代码而且进入函数内部.
run 执行当前被调试的程序
c 继续运行程序
quit 终止gdb
watch 使你能监视一个变量的值而不管它何时被改变.
backtrace 栈跟踪,查出代码被谁调用
print 查看变量的值
make 使你能不退出gdb就可以重新产生可执行文件.
shell 使你能不离开gdb就执行UNIX shell 命令
whatis 显示变量或函数类型
break 在代码里设置断点, 这将使程序执行到这里时被挂起.
info break 显示当前断点清单,包括到达断点处的次数等。
info files 显示被调试文件的详细信息。
info func显示所有的函数名称。
info local 显示当函数中的局部变量信息。
info prog显示被调试程序的执行状态。
delete [n] 删除第n个断点
disable[n] 关闭第n个断点
enable[n] 开启第n个断点
ptype 显示结构定义
set variable 设置变量的值
call name(args) 调用并执行名为name,参数为args的函数
finish 终止当前函数并输出返回值
return value 停止当前函数并返回value给调用者
e.g:
1、GDB在收到信号SIGSEGV后停止运行
2、通过backtrace命令,了解是main函数调用的错误函数
3、通过list命令,可以查看错误代码
(gdb)print i
(gdb)print $1-1 //充分利用别名功能
(gdb)print ary[1]@5 //打印5个数组元素的值
(gdb)whatis i //查看变量的类型
利用core文件进行出错文件的调试,使用ulimit -c来设定产生core文件的容量,0为不产生core文件,然后执行通过gdb进行调试
$gdb program core //program为出错文件
(gdb)info threads //显示当前可调试的所有线程
(gdb)thread ID //切换当前调试的线程为指定ID的线程
(gdb)bt //定位某一个要调试的线程,并通过bt命令查看函数调用情况
gcc的-D参数开启#ifdef DEBUG
#gcc -DDEBUG hello.c
insight debugger为gdb的图形外壳