GDB 学习入门之GDB初识

GDB文章目录

第一章 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.常用命令

命令缩写含义
runr运行一个程序
continuec让暂停的程序继续运行
nextn运行到下一行
steps如果有调用函数,进入调用的函数内部,相当于 step into
untiluuntil number 运行到指定行停下来
finishfi结束当前调用函数,到上一层函数调用处
returnreturn结束当前调用函数并返回指定值,到上一层函数调用处
jumpj将当前程序执行流跳转到指定行或地址
printp打印变量或寄存器值
backtracebt查看当前线程的调用堆栈
framef切换到当前调用线程的指定堆栈,具体堆栈通过堆栈序号指定
threadthread切换到指定线程
breakb添加断点
tbreaktb添加临时断点
deletedel删除断点
enableenable启用某个断点
disabledisable禁用某个断点
watchwatch监视某一个变量或内存地址的值是否发生变化
listl显示源码 info info 查看断点 / 线程等信息
ptypeptype查看变量类型
disassembledis查看汇编代码
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使用,符号表等。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值