GDB 学习入门之GDB初识

GDB文章目录

第一章 GDB 学习入门之GDB初识
第二章GDB学习入门之gdb准备


文章目录

  • GDB文章目录
  • 前言
  • 一、GDB调试前准备
  • 二、GDB调试原理
  • 三、GDB环境搭建
    • 检查是否存在
  • 四、GDB 调试的方式
  • 五、GDB调试命令
    • 1.退出命令
    • 2.常用命令
    • 3.条件断点命令
    • 4.多线程
  • 参考
  • 总结


前言

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使用,符号表等。

你可能感兴趣的:(编译调试工具,c语言)