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

linux 调试工具 GDB 使用

gdb是linux下常用的代码调试工具,本文记录常用命令。

被调试的应用需要使用 -g 参数进行编译,如不确定可使用如下命令查看是否支持debug

readelf -S filename | grep "debug"

启动调试

gdb binFile

 例如要调试sshd:

 

调试带参数的应用

有些应用需要携带参数使用,此时gdb要增加--args参数指定命令行参数属于应用,如下示例,--args后的参数均属于应用sshd

gdb --args /usr/sbin/sshd -f /etc/ssh/sshd_config -ddd

 

调试正在运行的进程 

gdb --pid=PID

调试进程的子进程 

退出调试

输入quit 或缩写 q 进行退出

查看源码

list 列出当前文件的源代码,默认列出前10行 (list 可以简写为 l)
 
选项
list [n], +:从指定行号n开始,列出该行后面的源代码
list [function_name]:列出指定函数的源代码
list [sline], [eline]:列出指定行号范围内的源代码,比如list 10 20 显示10-20行之间的代码
list -:列出上一个list命令列出的源代码的下一部分
list +:列出当前行后面的源代码

 如果源码是在某些库中或其他不在调试范围内的位置,是查看不到的

全速运行

run 缩写 r

设置断点在某行

break linenum 缩写 b linenum

设置断点在某文件某行

break filename:linenum 缩写 b filename:linenum

设置断点在某函数

break functionName 缩写 b functionName

设置条件断点

所谓条件断点,就是当满足一定条件时,断点才会命中。只要代码执行到断点处,普通的断点就会被命中并暂停下来,而条件断点必须要满足设置的条件,才能够被命中并暂停。

break functionName if a=1 缩写 b functionName if a=1

查看断点信息 

info break 缩写 info b

使能或禁用断点 

disable breakpoint_number
enable breakpoint_number

 breakpoint_number为断点编号,可通过info b查看,可在enable和disable加once参数,表明禁用或使能一次

删除断点

delete breakpoint_number

设置观察点 

在为变量或者一个表达式设置观察点后,当该变量或者表达式的值发生变化时,程序会发生中断,并且在变量或者表达式发生改变的地方暂停。

watch variable

继续运行

当程序运行到断点处后会停止,使用countinue继续执行直到下一次断点

countinue 缩写 ccontinue n  //跳过当前断点n次

单步运行

next 缩写 n    //如果遇到函数,不会进入函数内部,会一次性执行
step 缩写 s    //会进入函数内部执行

调用堆栈 

backtrace 缩写 bt

返回堆栈

当进入到另一个函数体之后,如果想跳出这个函数体回到调用的地方,使用如下命令

finish

查看变量值

print 缩写 pprint var_name    // var_name是要查看的变量名称print *array@len   // 显示数组array的前len个元素的值
print struct_name  // 显示结构体struct_name的成员变量值print *pointer_name // 查看指针指向的值
print pointer_name  // 查看指针本身

修改变量值

set variable_name = new_value 

跳转

until line_number (line_number是要执行到的行号)

 以上只列举了部分gdb常用命令,更详细的介绍可查阅gdb使用手册。

http://www.lryc.cn/news/263526.html

相关文章:

  • qt程序在Linux下打包的一般流程
  • 华为鸿蒙应用--欢迎页SplashPage+倒计时跳过(自适应手机和平板)-ArkTs
  • spring MVC概述和土门案例(无配置文件开发)
  • 持续集成交付CICD:K8S 通过模板文件自动化完成前端项目应用发布
  • 【TB作品】51单片机 实物+仿真-电子拔河游戏_亚博 BST-M51
  • MyBatis ${}和#{}区别
  • 大型语言模型:RoBERTa — 一种稳健优化的 BERT 方法
  • webpack知识点总结(基础应用篇)
  • 监控k8s controller和scheduler,创建serviceMonitor以及Rules
  • 支持向量机 支持向量机概述
  • http -- 跨域问题详解(浏览器)
  • Java对接腾讯多人音视频房间回调接口示例
  • vp与vs联合开发-通过FrameGrabber连接相机
  • 音视频直播核心技术介绍
  • JNDI注入Log4jFastJson白盒审计不回显处理
  • FPGA实现腐蚀和膨胀算法verilog设计及仿真 加报告
  • 核和值域的关系:什么是矩阵的秩?
  • 【MyBatis Plus】Service Mapper内置接口讲解
  • 制作一个简单 的maven plugin
  • 基于linux系统的Tomcat+Mysql+Jdk环境搭建(三)centos7 安装Tomcat
  • Ubuntu环境下SomeIP/CommonAPI环境搭建详细步骤
  • maven 项目导入异常问题
  • 在 VMware 虚拟机上安装黑苹果(Hackintosh):免费 macOS ISO 镜像下载及安装教程
  • 国产ToolLLM的课代表---OpenBMB机构(清华NLP)旗下ToolBench的安装部署与运行(附各种填坑说明)
  • 串口通信(5)-C#串口通信数据接收不完整解决方案
  • 大数据分析岗是干什么的?
  • hadoop运行jar遇到的一个报错
  • 长短期记忆(LSTM)神经网络-多输入分类
  • 开启创意之旅:免费、开源的噪波贴图(noise texture)生成网站——noisecreater.com详细介绍
  • Android Studio问题解决:Gradle Download 下载超时 Connect reset