猿创征文|【Linux Debug】Linux调试工具——GDB介绍

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

文章目录

    • 1、GDB是什么
    • 2、GDB如何使用
    • 3、GDB常用指令
      • 3.1 基础指令
      • 3.2 进阶指令
      • 3.3 多线程调试
    • 4、参考文章

猿创征文|【Linux Debug】Linux调试工具——GDB介绍_第1张图片

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可以在本地、远程、仿真器上执行。

猿创征文|【Linux Debug】Linux调试工具——GDB介绍_第2张图片

 

2、GDB如何使用

如何使用GDB?

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

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

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

猿创征文|【Linux Debug】Linux调试工具——GDB介绍_第3张图片

简单来说,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 查看内存地址的值,addr为地址信息,
n表示内存长度,f表示显示格式,u表示显示字节数
set 设置变量、寄存器、内存的值
signal [number] 发送一个信号给该进程
disassemble 反汇编,查看当前执行时的源代码的机器码

 

3.3 多线程调试

命令 含义
info threads 查看所有线程信息
thread id 切换到指定线程
thread apply all bt 查看所有线程堆栈信息
set scheduler-locking off|on|step off 不锁定任何线程,也就是所有线程都执行,这是默认值。
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

你可能感兴趣的:(#,Linux调试工具集合,linux,GDB,Linux调试,bug,嵌入式硬件)