zoukankan      html  css  js  c++  java
  • GDB高级使用方法

    1、设置环境变量

      用户可以在GDB的调试环境中定义自己需要的变量,用来保存一些调试程序中的运行数据。要定义一个GDB的变量很简单,只需使用GDB的set命令。

      GDB的环境变量和Linux一样,也是以$起头。如:

      (gdb)set $foo=xxx

      使用环境变量时,GDB会在第一次使用时创建这个变量,而在以后的使用中,则直接对其赋值。环境变量没有类型,可以给环境变量定义任意的类型,包括结构体和数组。如果要查看当前的所有环境变量,可以输入:

      (gdb)show convenience

      正是由于环境变量和程序变量可以相互使用,使得程序调试更为灵活便捷。例如:

      (gdb)set $i=0

      (gdb)print bar[$i++]->contents

      于是,当用户要执行累加操作时,就不必print bar[0]->contents, print bar[1]->contents一条条地输入命令了。输入这样的命令后,只要回车,重复执行上一条语句,环境变量就会自动累加,从而完成逐个输出的功能。  

    2、设置显示选项

      GDB设置显示选项较多,在此只列举最常用的设置方法:

      (1)设置参数地址信息

      GDB具有支持是否显示参数地址信息的功能,用户可以设置其为打开或者关闭,格式如下:

      (gdb)set print address [on/off]

      查看当前参数地址设置情况可以使用命令:show print address

      (2)设置语言

      GDB支持C、C++、Fortran、Java等多种语言。

      GDB会根据调试语言的不同,自动设置不同的语言环境。用户当然自己也可为其设置语言环境,设置语言的格式如下:

      (gdb)set language [option]

      如果set language命令后面的option什么也不写,gdb将显示所支持的所有语言种类。

      要查看当前环境的程序语言,可以使用命令show language,如果gdb不能识别所调试的语言,那么c语言将被作为默认的环境。

      (3)设置数组  

      对于显示数组而言,如果打开数组显示,数组中每个元素都占用一行;如果关闭的话,每个元素都以逗号分开,这个选项默认是关闭的,它的格式如下:

      (gdb)set print array [on/off] 

    3、条件测试方法

      在GDB环境中,除了用户直接指定断点外,还存在一种通过判断条件满足与否自动设置断点的方法,即条件测试方法。

      条件测试方法提供条件测试来启动断点的功能,即在某些条件下触发断点或者启动某些任务,它的格式如下:

      (gdb)break 行号或函数 if condition 

    4、GDB与shell通信

      有时候运行一个调试程序,需要查看Linux系统的相关信息,如果此时退出GDB调试环境,势必影响程序开发进程。基于这个因素,GDB开发出可以与shell通信的交互机制,这样用户可以不用离开gdb调试环境,就可以直接查看shell程序的结果。GDB与shell通信的语法格式如下:

      (gdb)sehll <command>

      其中command表示用户即将要执行的shell命令 

    5、窗口观察功能

      当用户调试一个很大的程序,并且在跟踪一个关键的变量时,发现这个变量不知在哪里被改动过,那么如何才能快速定位修改它的地方呢?

      在GDB中使用watch命令,可以跟踪一个变量的变化。使用watch窗口观察功能和在程序中特定位置设置断点的功能类似,但两者还有区别,使用窗口观察法只有在表达式真正发生变化时,监测点才被触发。

    6、历史记录功能

      当用户使用GDB的print查看程序运行的数据时,每一个print都会被GDB记录下来,GDB会以$1,$2,$3,...的方式为每一个print命令编上号。于是,用户可以使用这个编号访问以前的表达式。

    7、改变程序执行

      一旦使用GDB开始调试程序,用户可以根据自己的调试思路,来动态地在GDB中更改当前被调试程序的运行路线或其变量的值,这个强大的功能能够让用户很好地调试程序,比如,用户可以在程序的一次运行中走遍程序的所有分支。

      (1)修改变量数值

        (gdb)print x=4

      (2)跳转执行

         (gdb)jump <行标>

      (3)强制函数返回

        (gdb)return  或者 return <expression>(expression表达式的值被认为是函数的返回值)

  • 相关阅读:
    HOJ 2139 Spiderman's workout(动态规划)
    FZU 2107 Hua Rong Dao(dfs)
    Java 第十一届 蓝桥杯 省模拟赛 计算机存储中有多少字节
    Java 第十一届 蓝桥杯 省模拟赛 计算机存储中有多少字节
    Java 第十一届 蓝桥杯 省模拟赛 计算机存储中有多少字节
    Java 第十一届 蓝桥杯 省模拟赛 合法括号序列
    Java 第十一届 蓝桥杯 省模拟赛 合法括号序列
    Java 第十一届 蓝桥杯 省模拟赛 合法括号序列
    Java 第十一届 蓝桥杯 省模拟赛 无向连通图最少包含多少条边
    Java 第十一届 蓝桥杯 省模拟赛 无向连通图最少包含多少条边
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3428275.html
Copyright © 2011-2022 走看看