GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,主要完成以下四个方面的内容:
1.启动程序,让陈程序按照自己的定义随心所欲的运行。
2.可以放程序在指定的断点处停住。
3.当程序挺住时,可以检查程序发生的事情。
4.动态改变程序的执行环境。
GDB使用流程:
1. 编译可执行文件:~$: gcc -g zju.c -o zju 这里注意: -g表示程序可以被调试器调用。
2.启动gdb,~$: gdb <program>
program也就是你的执行文件,一般在当前目录下。
~$: gdb <program> core
用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件
~$: gdb <program> <PID> / 先用gdb <program>关联上源代码,再在gdb中用attach命令来挂接
进程的PID。并用detach来取消挂接进程。
如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动
attach上去,并调试他。program应该在PATH环境白能量中搜素到。
gdb几种暂停方式:
一、设置断点(BreakPoint)
break <func> 在进入指定函数时停住
break <linenum> 在指定的行号停住
break <filename> : linenum 在源文件filename 的指定行号暂停
break <filename> : func 在源文件的进入函数func 时暂停
break ...... if <condition> 在上述指定的参数处 满足条件condition条件暂停,比如,break if i=100,表示
当i等于100的时候程序暂停。
二、设置观察点(WatchPoint)
观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。我们有下面的几种方法来设置观察点:
watch <expr> 为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。
rwatch <expr> 当表达式(变量)expr被读时,停住程序。
awatch <expr> 当表达式(变量)的值被读或被写时,停住程序。
info watchpoints 列出当前所设置了的所有观察点。
三、设置捕捉点(CatchPoint)
你可设置捕捉点来补捉程序运行时的一些事件。如:载入共享库(动态链接库)或是C++的异常。设置捕捉点的格式为: catch <event> 当event发生时,停住程序。event可以是下面的内容:
1、throw 一个C++抛出的异常。(throw为关键字)
2、catch 一个C++捕捉到的异常。(catch为关键字)
3、exec 调用系统调用exec时。(exec为关键字,目前此功能只在HP-UX下有用)
4、fork 调用系统调用fork时。(fork为关键字,目前此功能只在HP-UX下有用)
5、vfork 调用系统调用vfork时。(vfork为关键字,目前此功能只在HP-UX下有用)
6、load 或 load <libname> 载入共享库(动态链接库)时。(load为关键字,目前此功能只在HP-UX下有用)
7、unload 或 unload <libname> 卸载共享库(动态链接库)时。
gdb程序恢复运行的命令: c/continue