gdb调试

​ 它是gcc的调试工具,调试工具都能干什么就不多说了。

7-1生成调试信息

​ 在使用gcc编译c/c++的程序时,需要在编译命令中加入 -g 这一参数,它可以为你显示函数名,变量名 等待。例如:gcc -g test.c -o test

​

7-2启动gdb调试信息

​ 启动指令:gdb 可执行程序名称

​ 设置运行参数:(在gdb中使用)

set args 可指定运行时参数。

show args 查看设置好的运行参数。

​ 启动程序:(在gdb中使用)

run 让程序开始执行,如果遇到断点,则停止中断点处。

start 让程序一步步向下执行。

7-3在调试中显示源代码

​ 如果在编译的命令上使用了 -g 选项,则可以在调试的过程中使用命令list或者l把源代码显示出来。并且可以中gdb中使用 特殊的指令来查看原代码中的内容。

​ 指令:

list 行数 打印第 x 行的上下文内容

list 函数名 显示对应函数名的原程序

list 显示当前行后面的源程序

list - 显示当前文件开始处的源程序

list file:num 显示file文件的第num行

list file:func 显示file文件中名为func函数的源代码

set listsize 行数 设置一次显示几行源代码(默认显示10行)

show listsize 查看当前listsize的设置

7-4断点设置

​ 设置普通断点:

break 设置断点,可简写为b

b num 在程序的第num行设置断点

b func 在名为func函数的入口处设置断点

​ 多文件直接设置断点:

b filename:num 在名为filename的源文件的第num行处打断点

b filename:func 在名为filename的源文件中的名为func函数的入口处打断点。

​ 查询所有断点:info b 或 info break 或 i break 或 i b,执行后会显示当前的所有断点及其序号。

​ 条件断点:(满足一定条件以后才会触发的断点)

​ b main.c:num if intValue == 5 在main.c源文件中的第八行设断点,如果行中的intValue的值等于 5时则暂停执行程序。

7-5断点的维护

​ 删除断点:delete可简写为d

delete num 删除断点序号为num的断点

delete 3 4 删除三号和四号断点

delete 1-n 删除从1到n的断点

delete 删除所有断点

​ 指定断点无效:disable可简写为dis

disable num 使得断点序号为num的断点失效。

disable 3 4 使得三号四号断点无效

disable 1-n 使得1到n个断点无效

disable 使得所有断点无效

​ 使无效的断点生效:enable可简写为ena

enable num 使得断点序号为num的断点恢复有效

enable 3 4 使得三号四号断点恢复有效

enable 1-n 使得1到n号断点恢复有效

enable 使得所有无效断点恢复有效

7-6gdb中调试代码的命令

run 运行程序,如果没有断点则会运行到底。可简写为r

next 单步跟踪,向下执行一条指令。可简写为n

step 单步跟踪,进入被调用的函数体内。可简写为s

finish 退出进入的函数,如果退出失败则函数中可能有断点导致退不出来

until 在一个循环体内单步跟踪时,如果不想跟踪了该命令可以直接运行到退出循环体。可简写为u

continue 继续运行程序,直到碰到下一个断点,没有断点则执行到底。可简写为c

7-7调试过程中查看变量的值

​ 打印运行时变量的值:

​ print XXX 打印值。其中的XXX可以为变量名,字符串,表达式的值,可简写为p

​ 自动显示变量的值:

​ 如果需要长期跟踪某个变量什么的可以采取这种方法,因为它可以在每一次单步跟踪时,打印一遍你 指定要展示的变量。

​ display 变量名 将某个变量设置为自动显示

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

​ delete display num 删除编号为num的自动显示(编号通过info display查看)。

​ 当然,可以通过加空格的方式或者1-n的方式删除多个自动显示

​ disable display num 将编号为num的自动显示置为无效

​ 当然,可以通过加空格,1-n的方式来为多个目标设置无效

​ enable display num 恢复编号为num的自动显示

​ 当然,可以通过加空格,1-n的方式来为多个无效目标设置有效

其他操作:

​ ptype XX 这个命令用于查看XX变量的数据类型。

​ p XX 这个命令用于打印XX变量的值

​ set var xx 可以在调试过程中修改xx的值。如set var x = 10 将程序中x变量的值设置为10.

GDB调试程序 [补档-2023-07-19]的更多相关文章

  1. [Z] 用GDB调试程序

    原文:http://blog.csdn.net/haoel/article/details/2879 用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工 ...

  2. 用 GDB 调试程序

    Linux 包含了一个叫 gdb 的 GNU 调试程序. gdb 是一个用来调试 C 和 C++ 程序的强力调试器. 它使你能在程序运行时观察程序的内部结构和内存的使用情况. 以下是 gdb 所提供的 ...

  3. 用GDB调试程序(一)

    http://blog.csdn.net/haoel/article/details/2879 用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或 ...

  4. 用gdb调试程序笔记: 以段错误(Segmental fault)为例

    用gdb调试程序笔记: 以段错误(Segmental fault)为例[转] 1.背景介绍2.程序中常见的bug分类3.程序调试器(如gdb)有什么用4.段错误(Segmental fault)介绍5 ...

  5. 用GDB调试程序

    转自:http://blog.csdn.net/haoel/article/details/2879 是一篇从基础讲gdb的博文 用GDB调试程序 GDB概述---- GDB是GNU开源组织发布的一个 ...

  6. 转载 gdb调试程序

    转载自csdn,作者haoel,链接http://blog.csdn.net/haoel/article/details/2879 用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一 ...

  7. STL 补档

    STL 补档 1.vector 作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据. vector在C++标准模板库中的部分内容,它是 ...

  8. Linux下使用GDB调试程序

    问题描述:          Linux下使用GDB调试程序 问题解决:          (1)生成调试文件 注:         使用命令   gdb IOStream.c   -o IOStre ...

  9. gdb调试程序函数名为问号,什么原因?step by step解决方案

    gdb调试程序函数名为问号,什么原因? http://bbs.chinaunix.net/thread-1823649-1-1.html http://www.bubuko.com/infodetai ...

  10. AI Summit(2018.07.19)

    AI Summit 时间:2018.07.19地点:北京丽都皇冠假日酒店

随机推荐

  1. Linux 下 Docker 操作遭到守护程序套接字时访问权限被拒绝

    Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker. ...

  2. 国内pip源提示“not a trusted or secure host”解决方案

    大家应该都知道怎么添加国内pip源(主要是豆瓣和阿里云),~/.pip/pip.conf文件配置大概如下(下面注释掉了豆瓣源): [global] # index-url = http://pypi. ...

  3. 题解| CF1561D2. Up the Strip(递推)

    题目链接:Here 这个思路学习自 Harris-H ,考虑递推而不是DP 与 D1 不同,开始考虑 \(f_{i-1} \to f_i\) 显然操作 1 多了 \(f_{i-1}\) ,操作2 多了 ...

  4. Missing return type on function. eslint(@typescript-eslint/explicit-module-boundary-types))

    setup报错: 解决办法:

  5. Invalid options object. Sass Loader has been initialized using an options obj

    https://blog.csdn.net/liwan09/article/details/106981239

  6. sipp3.6 on centos7安装部署

    概述 在VOIP软交换的开发过程中,必然需要对软交换进行批量压测. SIP压测工具一般都是sipp,免费,开源,功能足够强大,配置灵活,优点多. 环境 centos7.9 cmake3.6 sipp ...

  7. freeswitch的gateway实现出中继的主备方案

    概述 freeswitch是一款简单好用的VOIP开源软交换平台. 某些呼叫场景中,我们有2条出中继线路可选,2条出中继需要按照主备模式来配置,优先使用主中继呼叫,当主中继出现问题时,呼叫自动转移到备 ...

  8. FZU 2232

    ***题意:求最大匹配是否为n 今天突然想起来吧模板改一下,然而自己得想法不对,WA了有十多次吧,看了一下题解,不需要改,套上模板就行*** #include<stdio.h> #incl ...

  9. php开发之文件下载的实现

    前言 php是网络安全学习里必不可少的一环,简单理解php的开发环节能更好的帮助我们去学习php以及其他语言的web漏洞原理 正文 在正常的开发中,文件下载的功能是必不可少,比如我们在论坛看到好看图片 ...

  10. 如何将接口的返回值中所需信息提取出来作为其他接口的入参使用(postman与jmeter的使用)

    一.背景: 偶尔会用到一个场景,两个接口之前的调用有依赖关系,将其中一个的返回参数中的部分信息取出来作为入参在第二个接口中使用,代码内是比较好实现,只要定义一个变量,用于参数传递. 如果是测试过程中使 ...