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表达式的值被认为是函数的返回值)

GDB高级使用方法的更多相关文章

  1. Vue 事件的高级使用方法

    Vue 事件的高级使用方法 事件方法 在Vue中提供了4中事件监听方法,分别是: $on(event: string | Array, fn) $emit(event: string) $once(e ...

  2. linux下gcc编译多个源文件、gdb的使用方法

    一. gcc常用编译命令选项 假设源程序文件名为test.c. 1. 无选项编译链接 用法:#gcc test.c 作用:将test.c预处理.汇编.编译并链接形成可执行文件.这里未指定输出文件,默认 ...

  3. gdb基本使用方法

    gdb时linux下的一个非常好用的调试工具.下面给出它几个常用的方法 b 设置断点.c 继续执行. i 查看一些信息,比如断点,i b. bt 查看函数调用栈. n 执行下一条指令,但不会进入到调用 ...

  4. 【转】 GDB 常用调试方法

    一.多线程调试 多线程调试可能是问得最多的.其实,重要就是下面几个命令: info thread 查看当前进程的线程. thread <ID> 切换调试的线程为指定ID的线程. break ...

  5. 交叉编译问题记录-嵌入式环境下 GDB 的使用方法

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10693247.html 本文以嵌入式 Linux 环境下的 gdb 使用为例,记录交叉编 ...

  6. GDB高级调试

    一.多线程调试 多线程调试可能是问得最多的.其实,重要就是下面几个命令: info thread 查看当前进程的线程. thread <ID> 切换调试的线程为指定ID的线程. break ...

  7. Linux段错误及GDB Coredump调试方法

    最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation Fa ...

  8. Lambda--Optional、Collectors高级进阶方法

    Lambda--Collectors.optional高级使用 偶然看到了同事groupingBy用法,然后百度衍生出了optional,collectors,map等各种用法.突然发现自己之前写的代 ...

  9. gcc 的编译流程 和gdb的调试方法

    GCC的编译流程分为四个步骤: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking) 可以看的出来文件大小 gdb 调试 gdb - ...

随机推荐

  1. Python协程(上)

    几个概念: event_loop 事件循环:程序开启一个无限的循环,程序员会把一些函数注册到事件循环上.当满足事件发生的时候,调用相应的协程函数. coroutine 协程:协程对象,指一个使用asy ...

  2. POJ3687 Katu Puzzle

    好好写2-sat 如果a1-->b1矛盾则连边a1-->b2和b1-->a2 我定了一个ccnt和cnt变量,结果少打一个c,wa了好多次(lll¬ω¬) By:大奕哥 #inclu ...

  3. POJ 2406 Power Strings 简单KMP模板 strcmp

    http://poj.org/problem?id=2406 只是模板,但是有趣的是一个strcmp的字符串比较函数,学习到了... https://baike.baidu.com/item/strc ...

  4. mvc 从客户端 中检测到有潜在危险的 Request.Form 值

    天往MVC中加入了一个富文本编辑框,在提交信息的时候报了如下的错误:从客户端(Content="<EM ><STRONG ><U >这是测试这...&qu ...

  5. Linux可以明文传输密码的工具sshpass

    普通ssh只能手动输入密码,但是sshpass可以明文指定密码,但不建议使用,太不安全了.

  6. 用ldapsearch验证LDAP认证信息

    企业里面各种各样的系统,堆积多了以后帐号数不胜数,比较好的解决方案之一是用LDAP.不过Microsoft的ActiveDirectory认证是否成功需要有命令来进行验证,可以通过ldapsearch ...

  7. 发展中的生命力——Leo鉴书69

    接触<寻路中国>是在2011年11月24号的正略读书会上.当期主讲嘉宾是万圣书园创始人刘苏里,也是著名的大书评人.读书会有个传统就是每期推荐一本书.当期推荐就是<寻路中国>.事 ...

  8. Si4455 低电流 Sub-GHz收发器

    Silicon Labs 的 Si4455 是易于使用的低电流 Sub-GHz EZRadio® 收发器.覆盖所有主要波段,结合了即插即用的简单性和需要处理各种不同应用的灵活性.紧凑的 3 mm x ...

  9. 杭州有赞公司招聘 资深PHP开发工程师(平台架构方向)、技术专家

  10. Eclipse maven构建springmvc项目

    原文地址: http://www.cnblogs.com/fangjins/archive/2012/05/06/2485459.html 一.背景介绍 对于初学者,用maven构建项目并不是一件容易 ...