【嵌入式Linux】<知识点> GDB调试(更新中)

文章目录

前言

一、GDB调试预备工作

二、GDB的启动与退出

三、GDB中查看源代码

四、GDB断点操作

五、GDB调试指令


前言

在专栏【嵌入式Linux】应用开发篇_Linux打工仔的博客中,我们已经写了大量的源程序。但是在调试这些程序时我们都是通过printf大法和肉眼除错法。对于较大工程项目来说,这样的调试效率低。因此,有必要学习GDB调试技巧,提升瞄准bug的能力和开发效率。若涉及版权问题,请联系本人删除!


一、GDB调试预备工作

【1】源程序:包含.c源文件和.h头文件等。若工程较大,可以编写Makefile文件来管理,并在Makefile文件中添加gcc指令的选项-g。

【2】调试选项:在采用gcc指令来编译源程序时,加上-g选项来生成带有源程序信息的可执行文件,用于调试。(因此,该可执行文件会比平常的文件大)

【3】其它选项:-Wall打开所有警告;-O0关闭编译器优化。

【4】使用举例:当前源文件为hello.c,那么执行以下指令就能生成用于gdb调试的可执行文件hello。

gcc hello.c -g -Wall -O0 -o hello

二、GDB的启动与退出

【1】介绍:gdb是一个应用程序,但我们使用gdb  可执行文件的指令就能创建gdb进程。打开gdb后,目标程序并未开始执行,需要我们输入相关指令,如下所示:

【2】设置命令行参数:set  args  参数1  参数2 ...   注意:这里的参数是从argv[1]开始的。

【3】查看命令行参数:show args

【4】运行目标程序:run(简写为r)从main函数开始顺序执行,若遇到断点则停留。

【5】运行目标程序:start   停留在main函数的第一行代码,往后执行需要输入continue(简写为c)。

【6】退出gdb:quit  简写为q


三、GDB中查看源代码

【1】查看当前文件代码:list(简写为l)默认的当前文件为main函数文件,默认显示10行

  • 查看指定行号:list  行号
  • 查看指定函数:list  函数名

【2】切换文件查看:切换到哪个文件,哪个文件就变成了当前文件

  • 查看指定行号:list  文件名:行号
  • 查看指定函数:list  文件名:函数名

【3】设置显示行数:set  listsize  行数

【4】查看显示行数:show  listsize


四、GDB断点操作

【1】设置普通断点(当前文件):break  行号;②break  函数名。break可以简写为b。

【2】设置普通断点(其它文件):b  文件名:行号;②b  文件名:函数名

【3】设置条件断点:b  行号  if  变量名=某个值

【4】查看断点信息:i  b   全称是info break。

【5】删除断点:delete指令,简写为d

  • 删除指定编号断点:d  断点编号1  ...  例如:d  4 5 8  就是删除了编号为4、5、8的断点。
  • 删除连续编号断点:d  断点编号i-断点编号j  例如:d  1-5  就是删除了编号为1、2、3、4、5的断点。

【6】设置断点无效:disable指令,简写为dis

  • 无效指定编号断点:dis  断点编号1 ...
  • 无效连续编号断点:dis  断点编号i-断点编号j

【6】设置断点有效:enable指令,简写为ena

  • 有效指定编号断点:ena  断点编号1 ...
  • 有效连续编号断点:ena  断点编号i-断点编号j

五、GDB调试指令

相关推荐

  1. Linux设备调试-GDB调试器

    2024-07-11 23:20:05       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 23:20:05       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 23:20:05       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 23:20:05       57 阅读
  4. Python语言-面向对象

    2024-07-11 23:20:05       68 阅读

热门阅读

  1. 前端文件下载的方式

    2024-07-11 23:20:05       20 阅读
  2. kubernetes授予用户指定命名空间的使用权限

    2024-07-11 23:20:05       24 阅读
  3. 开发中缓存的使用场景、注意事项及优缺点分析

    2024-07-11 23:20:05       21 阅读
  4. C# 如何单纯的优化循环

    2024-07-11 23:20:05       23 阅读
  5. .Net Core 微服务之Consul(一)

    2024-07-11 23:20:05       19 阅读
  6. YOLO 在OPENCV QT上如何使用?

    2024-07-11 23:20:05       23 阅读
  7. 技术成神之路:设计模式(一)单例模式

    2024-07-11 23:20:05       21 阅读
  8. perl语言入门学习

    2024-07-11 23:20:05       23 阅读