当前位置: 首页 > news >正文

【Linux】调试器 gdb使用

在Linux系统中,GDB(GNU Debugger)是一个强大的调试工具,它允许开发者检查和调整正在运行的程序。以下是关于如何使用GDB的详细指南,包括了基本的命令和一些高级功能。

Linux调试器 gdb使用

编译带有调试信息的程序

默认情况下,GCC/G++在编译时不会包含调试信息,这使得GDB无法有效地调试程序。为了使GDB能够调试程序,我们需要在编译命令中加入-g选项来生成调试信息。

背景

  • 程序的发布方式有两种,DebugRelease模式。
  • Linux gcc/g++执行后的二进制文件,默认Release模式。
GCC/G++ 编译选项
选项描述
-g添加调试信息到输出文件,这对于GDB调试是必要的。
-O0禁止优化,这有助于GDB正确地跟踪源代码位置。
-ggdb产生GDB可以使用的调试信息,有时比-g更加详细。

GDB常用命令

命令/缩写功能描述示例
help显示GDB的帮助信息。help break
file [filename]加载待调试的程序文件。file ./a.out
run/r [args]启动程序,可以带上参数argsrun arg1 arg2
break/b [function]在指定函数或行号设置断点。break main/break 42
info breakpoints/b列出所有设置的断点。
delete/d [number]删除指定编号的断点。delete 1
clear/cl [function]清除在指定函数或行号的断点。clear main/clear 42
next/n执行到下一行,如果当前行是函数调用,则跳过函数体。next
step/s执行到下一行,如果当前行是函数调用,则进入函数体。step
continue/c继续执行直到遇到下一个断点。continue
backtrace/bt显示调用堆栈。backtrace
print/p [expression]打印表达式的值。print x
display/dis [expression]每次程序停止时都显示表达式的值。display x
undisplay/ud [display-number]停止显示某个display-number对应的表达式的值。undisplay 1
until/u [line-number]执行直到到达指定行号,或到达第一个改变的行。until 50
q/quit/Ctrl+D退出gdb

高级GDB功能

查看代码

使用list命令可以查看程序的源代码。例如:

  • list:列出程序的一部分。
  • list [start-line], [end-line]:列出指定行号范围内的代码。
  • list + [line-number]:列出指定行号附近的代码。
查看变量信息
  • print /x [variable]:以十六进制形式打印变量的值。
  • print /t [variable]:打印变量的类型。
  • print /r [variable]:以十进制形式打印变量的值。
  • print /u [variable]:以无符号整数形式打印变量的值。
设置条件断点

你可以设置条件断点,只在满足特定条件时才触发断点:

  • break [function] if [condition]:在满足condition时在function处设置断点。请添加图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 各个系统配置端口转发
  • [Labview] 表格单元格外边框 二维图片叠加绘图
  • 新手小白的pytorch学习第五弹-----pytorch的工作流
  • STM32智能交通监测系统教程
  • Docker存储目录问题,如何修改Docker默认存储位置?(Docker存储路径、Docker存储空间)etc/docker/daemon.json
  • PCIe驱动开发(3)— 驱动设备文件的创建与操作
  • 安装adb和常用命令
  • QT--控件篇四
  • php基础: 三角形
  • Windows的包管理器Chocolatey
  • 从代理模式到注解开发
  • css实现每个小盒子占32%,超出就换行
  • 【Linux】将IDEA项目部署到云服务器上,让其成为后台进程(保姆级教学,满满的干货~~)
  • 关系型数据库和非关系型数据库
  • 1千多看图猜成语游戏ACCESS\EXCEL数据库
  • [笔记] php常见简单功能及函数
  • GitUp, 你不可错过的秀外慧中的git工具
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • ReactNative开发常用的三方模块
  • Ruby 2.x 源代码分析:扩展 概述
  • Tornado学习笔记(1)
  • VuePress 静态网站生成
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 手写一个CommonJS打包工具(一)
  • 小李飞刀:SQL题目刷起来!
  • - 转 Ext2.0 form使用实例
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • #13 yum、编译安装与sed命令的使用
  • #宝哥教你#查看jquery绑定的事件函数
  • (23)Linux的软硬连接
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C)一些题4
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (搬运以学习)flask 上下文的实现
  • (待修改)PyG安装步骤
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET开发不可不知、不可不用的辅助类(一)
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET连接MongoDB数据库实例教程
  • .net生成的类,跨工程调用显示注释
  • @hook扩展分析
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [100天算法】-不同路径 III(day 73)
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [AI aider] 打造终端AI搭档:Aider让编程更智能更有趣!
  • [Angular] 笔记 20:NgContent
  • [BROADCASTING]tensor的扩散机制
  • [BT]小迪安全2023学习笔记(第29天:Web攻防-SQL注入)