GDB 学习入门之GDB初识

简介: GDB 学习入门之GDB初识

前言


GDB (GNU 项目调试器)可以让您了解程序在执行时“内部” 究竟在干些什么,以及在程序发生崩溃的瞬间正在做什么。

GDB 做以下 4 件主要的事情来帮助您捕获程序中的 bug

◼ 在程序启动之前指定一些可以影响程序行为的变量或条件

◼ 在某个指定的地方或条件下暂停程序

◼ 在程序停止时检查已经发生了 什么

◼ 在程序执行过程中修改程序中的变量或条件,这样就可以体验修复一个bug 的成果,并继续了解其他 bug


一、GDB调试前准备


编译器的程序优化选项一般有五个级别,从 O0 ~ O4 注意第一个 O0 ,是字母 O 加上数字 0 O0 表示不优化,从 O1 ~ O4 优化级别越来越高, O4 最高。这样做的目的是为了调试的时候,符号文件显示的调试变量等能与源代码完全对应起来。优化越高符号文件提供的信息越少。


二、GDB调试原理


一般要调试某个程序,为了能清晰地看到调试的每一行代码、调用的堆栈信息、变量名和函数名等信息,需要调试程序含有调试符号信息。使用 gcc 编译程序时,如果加上-g选项即可在编译后的程序中保留调试符号信息


三、GDB环境搭建


一般情况下linux 系统自带gdb,如果不存在可以自行安装,可以通过源码安装和yum install gdb 傻瓜式安装。


检查是否存在

[root@localhost ~]# gdb --v
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-120.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.


四、GDB 调试的方式


GDB调试 主要 有三种方式:

  1. gdb filename
  2. gdb attach pid 附加进程附加进程
  3. gdb filename corename 调试调试 core 文件文件


五、GDB调试命令


1.退出命令

gdb输入命令:输入quit(q)或者 Ctrl-d 来退出


2.常用命令

命令 缩写 含义
run r 运行一个程序
continue c 让暂停的程序继续运行
next n 运行到下一行
step s 如果有调用函数,进入调用的函数内部,相当于 step into
until u until number 运行到指定行停下来
finish fi 结束当前调用函数,到上一层函数调用处
return return 结束当前调用函数并返回指定值,到上一层函数调用处
jump j 将当前程序执行流跳转到指定行或地址
print p 打印变量或寄存器值
backtrace bt 查看当前线程的调用堆栈
frame f 切换到当前调用线程的指定堆栈,具体堆栈通过堆栈序号指定
thread thread 切换到指定线程
break b 添加断点
tbreak tb 添加临时断点
delete del 删除断点
enable enable 启用某个断点
disable disable 禁用某个断点
watch watch 监视某一个变量或内存地址的值是否发生变化
list l 显示源码 info info 查看断点 / 线程等信息
ptype ptype 查看变量类型
disassemble dis 查看汇编代码
set args 设置程序启动命令行参数
show args 查看设置的命令行参数
tui 是一个命令行的界面,能同时把代码显示出来
detach 分离程序和gdb调试程序


3.条件断点命令

设置条件断点的命令:break [location] if condition

使用 condition N condition. N是一个 breakpoint number.


4.多线程

多线程下禁止线程切换: set scheduler-locking on


参考


官方参考文档

GDB源码


总结


以上就是今天要讲的内容,本文仅仅简单介绍了gdb的使用方法。此系类文章计划介绍gdb的基本原理和简单实用,cgdb使用,符号表等。

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
6月前
|
NoSQL Linux 文件存储
GDB学习入门之gdb准备2
GDB学习入门之gdb准备2
57 0
GDB学习入门之gdb准备2
|
6月前
|
NoSQL Shell Linux
GDB学习入门之gdb准备
GDB学习入门之gdb准备
62 0
|
6月前
|
NoSQL 小程序 C语言
GDB调试学习(四):段错误
GDB调试学习(四):段错误
149 0
|
6月前
|
NoSQL
GDB调试学习(三):观察点
GDB调试学习(三):观察点
71 0
|
6月前
|
NoSQL
GDB调试学习(二):断点
GDB调试学习(二):断点
73 0
|
6月前
|
NoSQL IDE Linux
Linux的学习之路:8、Linux调试器-gdb使用
Linux的学习之路:8、Linux调试器-gdb使用
70 0
|
6月前
|
NoSQL Shell C语言
GDB调试学习(一):单步执行和跟踪函数调用
GDB调试学习(一):单步执行和跟踪函数调用
145 1
|
6月前
|
NoSQL Linux Android开发
OPENJTAG调试学习(三):使用 gdb 命令行进行调试
OPENJTAG调试学习(三):使用 gdb 命令行进行调试
111 0
|
3月前
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
62 10
|
3月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。