0


玩转 GDB:Linux 程序调试最佳实践

个人主页:chian-ocean

文章专栏

前言

GDB(GNU Debugger) 是一个功能强大且灵活的 Linux 下的调试工具,广泛用于调试 C/C++ 以及其他程序语言的程序。它能够帮助开发者检查代码、分析程序崩溃、设置断点、查看变量值以及跟踪程序执行过程。下面我将详细介绍 GDB 的功能、基本用法以及一些常用命令。

在这里插入图片描述

GDB 介绍

定义:GDB,全称 GNU Debugger,是一个用于调试可执行程序的工具,支持多个编程语言,主要是 C 和 C++。它提供对程序的逐行跟踪、设置断点、检查变量等功能,帮助开发者找出程序中的错误。

主要功能

  1. 设置断点:可以在指定的行、函数或条件下设置断点,程序运行到断点时会暂停,方便检查程序状态。
  2. 单步执行:可以逐行运行程序,观察每一行代码的执行效果。
  3. 查看变量值:可以查看变量的当前值,以判断程序的状态。
  4. 堆栈跟踪:当程序崩溃时,可以查看函数调用栈,找出导致错误的源头

release和debug

特性Debug 版本Release 版本调试信息含有详细的调试信息,可以逐行调试无调试信息,难以逆向或逐行调试代码优化不进行优化,保持代码结构易于调试进行多重优化,代码结构不易读文件大小大,包含调试符号和额外信息小,经过优化并剥离调试信息运行速度慢,缺乏优化快,经过优化,提高了执行效率使用场景开发阶段,调试和单元测试发布给用户,性能测试和实际使用

启动 GDB

可以通过以下方式启动 GDB:

gdb my_program
  • 启动后进入调试模式:GDB 提供了一个交互式的命令行界面,你可以输入各种命令来操作调试。

在这里插入图片描述

常用 GDB 命令

调试代码

#include<stdio.h>intfactorial(int n){if(n ==1)return1;return n *factorial(n -1);}intmain(){int num =5;int result =factorial(num);printf("Factorial of %d is %d\n", num, result);return0;}

启动调试:

r (run)

设置断点:

b (break)

在特定行或函数处设置断点。例如:

break main
break20# 在本文件的第 20 行设置断点

在这里插入图片描述

查看信息

info b (information break)

在这里插入图片描述

  • info locals:- 查看当前函数中所有局部变量的值。info locals在这里插入图片描述
  • info registers:- 查看当前寄存器的内容,这对分析汇编代码和优化可能有帮助

查看变量和表达式

p (print)<变量名/表达式>

在这里插入图片描述

display:用于在每次暂停时自动显示某个变量的值:

display x

在这里插入图片描述

单步调试

**

step

(缩写

s

)类比vs F11**

  • 单步执行代码。如果当前语句是一个函数调用,则进入函数内部。
s (step)

**

next

(缩写

n

)类比vs F10**

  • 单步执行代码。如果当前语句是一个函数调用,则直接执行该函数,而不进入函数内部。
n (next)

继续执行程序

  • continue (缩写 c):、继续执行程序直到下一个断点或者程序结束。
c (continue)

查看调用栈

  • backtrace (缩写 bt):查看当前的调用堆栈,显示每一层调用的函数、文件和行号。这在程序崩溃时尤其有用,可以帮助找出问题的源头。
bt (backtrace)

在这里插入图片描述

删除断点

  • delete
d (delete) <断点编号>

删除特定的断点。例如,删除编号为 1 的断点:

d (delete) 1

退出 GDB

  • quit (缩写 q):

退出 GDB。

quit

总结

  • GDB 是一个非常强大的调试工具,能帮助开发人员快速找出程序中的问题。
  • 通过 断点设置单步执行查看变量值调用栈分析 等功能,开发人员可以深入了解程序的运行情况。
  • 练习调试技巧 对于开发人员来说非常重要,熟练掌握 GDB 能够大大提高解决问题的能力和效率。

t


# **总结**

* **GDB** 是一个非常强大的调试工具,能帮助开发人员快速找出程序中的问题。
* 通过 **断点设置**、**单步执行**、**查看变量值**、**调用栈分析** 等功能,开发人员可以深入了解程序的运行情况。
* **练习调试技巧** 对于开发人员来说非常重要,熟练掌握 GDB 能够大大提高解决问题的能力和效率。

GDB 的命令较多,建议开发人员在日常编写和调试代码时经常使用这些命令,熟悉这些工具会让你对代码更加理解透彻,同时也能更快解决问题。
标签: linux 运维 服务器

本文转载自: https://blog.csdn.net/Cayyyy/article/details/144187260
版权归原作者 chian-ocean 所有, 如有侵权,请联系我们删除。

“玩转 GDB:Linux 程序调试最佳实践”的评论:

还没有评论