IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 猿创征文|【Linux Debug】Linux调试工具——GDB介绍 -> 正文阅读

[系统运维]猿创征文|【Linux Debug】Linux调试工具——GDB介绍

img
个人主页:董哥聊技术
我是董哥,嵌入式领域新星创作者
创作理念:专注分享高质量嵌入式文章,让大家读有所得!
img

GDB的吉祥物:弓箭鱼

1、GDB是什么

GDB:GNU Project DebuggerGNU工程仿真器,允许开发者能够去看程序内部发生的情况,或者发生crash时候, 知道程序正在做什么!它诞生于 GNU 计划(同时诞生的还有 GCC、Emacs 等),是 Linux 下常用的程序调试器。发展至今,GDB 已经迭代了诸多个版本,当下的 GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada 等。实际场景中,GDB 更常用来调试 C 和 C++ 程序。

?

GDB主要功能有四个方面:

  • 启动程序:指定任何可以影响其运行行为的动作
  • 停止程序:使程序在指定条件下停止
  • 检查错误:当程序停止时,检查发生了什么
  • 纠正错误:更改程序中的内容,纠正错误

GDB可以在本地、远程、仿真器上执行。

image-20221101152802333

?

2、GDB如何使用

如何使用GDB?

要想回答这个问题,从正统角度来分析,有两种方式:

  • GDB官方手册:https://sourceware.org/gdb/

  • GDB帮助信息help all(命令行输入)

image-20221101153218534

简单来说,GDB调试方法有3种:

  1. 直接调试gdb [exec file],用于直接仿真一个执行程序
  2. 附属调试gdb attach pid,用于直接调试一个已运行的程序(ubuntu注意权限问题)
  3. 核心转存调试gdb [exec file] [core-dump file],用于调试core-dump文件

TipsGDB调试的[exec file],该文件最好编译的时候带上-g选项,生成带调试信息的可执行文件。

?

3、GDB常用指令

3.1 基础指令

指令含义
file [exec file]选择要调试的可执行文件
run/r重新开始运行文件
start暂时断点,停在第一执行语句处
list/l查看源代码
next/n单步调试,逐过程,函数直接执行
step/s单步调试,逐语句,跳入函数执行
backtrace/bt查看函数调用的堆栈信息
finish结束当前函数,返回函数调用点
continue继续执行
print/p打印变量
break/b [filename:line_number]打断点, [文件名:行号],也有多种方式
quit退出gdb调试

?

3.2 进阶指令

指令含义
frame查看当前帧信息,包括参数,文件所在位置等
info该指令,可以查看到更多详细信息,如下:
info threads查看所有线程信息
info sharedlibrary查看共享库信息
info args查看参数信息
info breakpoints查看断点信息
info frame查看当前帧信息
core-file [core-dump file]选择core-dump文件
watch [expr]观察某个表达式的值是否发生变化,如果有变化,马上停住程序。
examine/x <n/f/u> 查看内存地址的值,addr为地址信息,
n表示内存长度,f表示显示格式,u表示显示字节数
set设置变量、寄存器、内存的值
signal [number]发送一个信号给该进程
disassemble反汇编,查看当前执行时的源代码的机器码

?

3.3 多线程调试

命令含义
info threads查看所有线程信息
thread id切换到指定线程
thread apply all bt查看所有线程堆栈信息
set scheduler-locking off|on|stepoff 不锁定任何线程,也就是所有线程都执行,这是默认值。
on 只有当前被调试程序会执行。
step 在单步的时候,除了next过一个函数的情况以外,只有当前线程会执行。
thread apply ID1 ID2 command指定某个线程执行相关命令
thread apply all command指定所有线程执行相关命令

更多命令详细使用见参考文章

?

4、参考文章

[1]:https://blog.csdn.net/21cnbao/article/details/7385161

[2]:https://blog.csdn.net/niyaozuozuihao/article/details/91802994

img

点赞+关注,永远不迷路

img
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:57:57  更:2022-11-05 00:59:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:24:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码