linux学习之C语言(3)------ gdb

来源:互联网 发布:云计算的就业方向 编辑:程序博客网 时间:2024/06/05 06:08

        调试程序要用到gdb这个调试工具,GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。

      

    一般来说,GDB主要帮助你完成下面四个方面的功能:
          1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
          2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
          3、当程序被停住时,可以检查此时你的程序中所发生的事。
          4、动态的改变你程序的执行环境。


     那么该如何使用gdb 这个强大的调试工具来调试自己的程序呢?
     

        首先,在编译时需要加上-g或-ggdb选项。

        接着,使用格式 gdb fileName 来调用gdb 或直接在终端输入gdb来进入调试模式。

        最后,利用gdb调试选项,进行一系列的操作,直到满足你的要求,找到程序中的错误,了解程序的执行过程。

 

      当然了,gdb调试选项有很多,下面罗列一些比较常用的。

       gdb 常用命令:

                 file    ------ 装入想要调试的可执行文件              

                 run     ------ 执行当前被调试的程序              

                 kill     ------ 终止正在调试的程序               

                 step  ------ 执行一行源代码并进入函数内部               

                 next  ------ 执行一行源代码但不进入函数内部   

                 break ------在代码里设置断点,这将使得程序在执行到这里时被挂起

                 print --------打印表达式或变量的值,或打印内存中某个变量开始的一段连续区域的值,还可以用来对变量进行赋值。

                 display -----设置自动显示的表达式或变量,当程序停止或在单步跟踪时,这些变量会自动显示其当前值 。

                 list----------- 列出产生执行文件的源代码的一部分

                 quit ----------退出gdb

                 watch --------使你能监视一个变量的值而不管它何时被改变

                 backtrace---- 回溯跟踪

                 frame n ----- 定位到发生错误的代码段, n为backtrace命令的输出结果中的行号

                 examine ----- 查看内存地址中的值

                 jump ---------- 使程序跳转执行

                 signal --------   产生信号量

                 return --------  强制函数返回

                 call ------------ 强制调用函数

                 make ---------- 使用记不退出gdb就可以重新产生可执行文件

                 shell ----------- 使用户不离开gdb就可以执行shell命令。


        下面对上面的命令中一些重要的命令,给出具体的用法

          break 命令用法:  

                 break <function>          在进入指定函数时停住

                 break <linenum>          在指定行号停住

                 break +offset                  在当前行的前面offset行停住

                 break -offset                   在当前行的后面offset行停住

                 break filename:linenum    在指定文件的的指定行停住

                 break filename:function      在指定文件的指定函数处停住

                 break  *address             在程序运行内存中指定地址处停住

                 break                                在下条命令处停住

                 break if <condition>       在条件成立时停止


          display相关gdb命令:

                 undisplay  <dnums>        删除自动显示

                 delete display <dnums>  删除自动显示

                 disable display <dnums> 不删除自动显示,只是让其失效

                 enable display <dnums>   不删除自动显示,只是让其恢复

                 info display                           查看display设置自动显示的信息


          查看源程序:

                  list <listnum>   列出指定行周围的源程序

                  list <function>   列出指定函数的源程序

                  list                       列出当前行前后的源程序

                  liset -                  列出当前行前面的源程序

                  list +                     列出当前行后面的源程序

                  set listsize <count>       设置一次显示源代码的行数

                  show listsize      查看当前的listsize 设置

                  list <first>,<last>   查看指定的first行到last行的源程序


        这些命令很多,用户也很灵活,当然,不可能都记住,其实这些命令不用记,在用得时候可以看gdb的帮助文档。

      

         注意事项:

                1.   上述大多数命令可以使用简写,如break 只接输入b即可,又如,run 直接输入r即可。

                2.    如果希望从断点处继续执行程序,输入c即可

                3.    如果希望运行到函数结束,输入finish

                4.    查看堆栈信息,输入bt

                5.    查看么存,输入  x/64xh+内存地址

                6.    删除断点,delete break+断点序号

                7     修改指定内存值:print + * 地址 =数值

                8     查看汇编代码:disassemble+函数名


        对于这么多的命令,用到时查一下即可。



                





      


0 0