GDB调试程序 (一)

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

 

                

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值