一、调试的工具

gdb

二、调试的对象

可执行程序,而不是.c文件,调试的对象一定是一个进程。调试时,程序必须带有调试信息,所以在编译链接的过程中,需要加上参数“-g”。

三、调试的命令

l 显示代码 
回车 继续执行上一操作 
b + 行号 加断点 
info + b(break) 查看断点信息 
r 运行程序 
n 下一步,单步执行 
p + 变量名 打印变量的值(p + &变量名 打印变量的地址) 
q 退出调试 
display + 变量名 持续打印 
c 继续执行 
delete + 断点编号 删除断点 
s 进入函数 
finish 跳出函数 
bt 函数调用栈关系(在被调用函数里看能看见自己和调用函数,在调用函数里只能看见自己)

四、实例

1.先编写一个简单的c语言程序——main.c。

内容见下:

像下面的“gcc -o main main.c”,是无法生成有调试信息的main的,因此无法进行调试。


加上参数“-g”,才可以进行调试。


2.正式开始调试:

打印全部的代码


下断点、查看断点信息 


运行程序 


下一步,查看变量i、arr[i]的值

持续显示变量i、arr[i]的值

继续执行

删除断点

注意删除断点的信息是断点的编号,我先把开始设的断点1号、2号删除了,再新增了两个断点——3号和4号,所以这时候再删除1号断点是不能成功的。

对于后续的调试操作——进入函数、跳出函数和查看函数调用栈关系,我增加了add.c和max.c,再进行新的调试,所有的文件如下:

add.h


max.h


add.c


max.c


main.c


首先,将这些程序进行编译、链接,有两种在程序中加入调试信息的方法。

方法一:在add.c、max.c的编译过程中加入调试信息

方法二:在三个程序的编译链接过程中加入调试信息

开始调试:

在调用add()、max()处下断点

进入add(),并且查看函数调用栈关系

退出add(),查看函数调用栈关系

对比上面两张图,可以看到在main里看bt和在add中看bt的差别。同理,在max中能够看到max和main的调用信息,如果max中又调用了另一个函数,则在这个函数中查看bt的话,就能看到三个函数了。

以上,就是比较简单的gdb调试过程,如果想要了解更多关于gdb调试的知识,可以去看看《gdb完全用户手册》,谢谢您的观看。

原文链接:https://blog.csdn.net/qq_39755395/article/details/78305934

Linux系统之下的基本gdb调试相关推荐

  1. 【Linux系统编程学习】 GDB调试器的简单使用

    此为牛客网Linux C++课程 1.13&1.14&1.15&1.16 的课程笔记. 0. GDB简介 1. 准备工作 想要使用gdb调试,首先需要用gcc的-g参数生成可执 ...

  2. 嵌入式Linux系统编程学习之七gdb调试器

    文章目录 前言 一.gdb的常用命令 前言 一.gdb的常用命令   Linux包含了一个叫gdb的调试程序.gdb可以用来调试C和C++程序.在程序编译时用 -g 选项可打开调试选项.   常见调试 ...

  3. 黑马程序员Linux系统开发视频之gdb调试方法

    一.gdb -- 命令     1.前提条件:可执行文件必须包含调试信息 gcc -gcc     2.gdb 文件名 -- 启动gdb调试     3.查看代码的命令         当前文件:   ...

  4. Linux下gcc/g++编译器gdb调试器和makefile的使用

    文章目录 一.gcc的使用 gcc选项 二.gdb的使用 三.Linux项目自动化构建工具-make/Makefile 3.1 概念 3.2 使用 3.3 原理 一.gcc的使用 首先我们知道一个C/ ...

  5. linux的基础知识——多线程gdb调试

    1.gdb调试 \qquadgdb调试命令,在生成可执行文件时,加-g gcc xxx.c -o xxx -g \qquad执行gdb xxx,就可以跳转到gdb调试界面,对xxx进行调试. \qqu ...

  6. linux signal 符号表6,gdb调试信息__000_linux-gnu_00000000_002_rw-p__169IT.COM

    很少使用gdb调试,现在用了,又不知道是什么意思,求大侠指教 *** glibc detected *** /home/hhbgk/url/url: free(): invalid next size ...

  7. gdb vscode调试linux程序,vscode如何使用gdb调试

    vscode如何使用gdb调试,路径,程序,设备,文件名,可执行 vscode如何使用gdb调试 易采站长站,站长之家为您整理了vscode如何使用gdb调试的相关内容. 1.vscode启动debu ...

  8. qt单步调试linux程序,用Qt 调用GDB调试 Arm程序 详细步骤----可单步执行每一行

    前言 本人交叉编译环境 Ubuntu 10.04(虚拟机),编译工具链 arm-hisiv100nptl-linux,Qt 4.8.5 ,QtCreator1.3.1 1.在虚拟机Ubuntu 10. ...

  9. Linux系统vscode断点单步运行调试C++程序

    安装vscode 安装比较简单略略略略!!!! 配置安装插件 Ctrl+Shift+X检索并安装C++.C++Clang.Cmake.Cmake Tools 创建launch.json文件 用vsco ...

  10. GDB调试教程:1小时玩转Linux gdb命令

    原文链接:http://c.biancheng.net/gdb/ GDB 入门教程 本教程以下面的代码为例,在 Linux 系统下来讲解 GBD 的调试流程: int main (void) {uns ...

最新文章

  1. 参加web前端培训需要注意什么
  2. @valid 不生效_黑帽seo高手-实战细谈301生效周期+影响收录重要因素(探索)
  3. linux系统下的程序开发报告册,linux系统及应用应用开发实验报告册
  4. android 透明主题 crash,Android 8.0 的填坑(透明的activity崩溃)
  5. linux重启memcache_linux下启动和停止memcached
  6. pom中导入spingside包
  7. 买表(【CCF】NOI Online能力测试3 入门组)
  8. java加密解密代码_java加解密文件公用方法整合(多看一本书,少写三行代码)
  9. java求指数与对数
  10. Netty4.0学习笔记系列之五:自定义通讯协议
  11. 简述静态全局变量的概念 C++
  12. linux中命令du -sm,Linux中的Du命令
  13. 《可复制领导力》读后感
  14. mybatis与spring结合
  15. 警惕Linux的传销投机属性,恢复建立契约商业化社会秩序。
  16. R3Det: Refined Single-Stage Detector with Feature Refinementfor Rotating Object论文学习
  17. 原神 Android 教程 —安卓版
  18. 五险一金真的那么重要吗?为什么很多人宁愿做小时工不要五险一金?
  19. html5 语音输入小话筒,HTML5语音输入方法
  20. Java开发微信公众号初体验

热门文章

  1. 如何用计算机辅助设计进行设计,计算机辅助设计的基本概念和特点
  2. python从js文件中取数据_Python爬虫学习,记一次抓包获取js,从js函数中取数据的过程...
  3. micropython常用模块有那个_Python17个常用内置模块总结
  4. php 表单数据的获取代码,php 表单数据的获取代码
  5. c语言中有123f,C语言库函数(S类字母) - 3
  6. 故障恢复 stm32_77条STM32知识,千万不能错过!干货
  7. 没有安装python如何运行py_在没有安装Python的前提下,让Sublime text编辑器来运行Py?...
  8. python中init是什么_详细解读Python中的__init__()方法
  9. oracle-Nomount
  10. 定义一个内核panic问题