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.mzph.cn/news/220311.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性回归问题

目录 一、线性回归关键思想 1、线性模型 2、基础优化算法 二、线性回归的从零开始实现 1、生成数据集 2、读取数据集 3、初始化模型参数 4、定义模型 5、定义损失函数 6、定义优化算法 7、训练 三、线性回归的简洁实现 1、生成数据集 2、读取数据集 3、定义模型…

读这篇文章让你彻底了解Redis

我是Redis 你好,我是Redis,一个叫Antirez的男人把我带到了这个世界上。 说起我的诞生,跟关系数据库MySQL还挺有渊源的。 在我还没来到这个世界上的时候,MySQL过的很辛苦,互联网发展的越来越快,它容纳的数…

学习笔记 -- CAN系统基础

一、CAN物理层 一个双节点CAN网络示意图如下,两颗120Ω终端电阻并联呈现总线电阻60Ω。 A、B两个节点的CAN收发器(Transceiver),只负责电平转换。当总线静默时,收发器内部的2.5V电源经15KΩ电阻把CAN-H和CAN-L都拉到2.…

浅入研究 tcache_perthread_struct

Index 前情提要过程总结 前情提要 tcache_perthread_struct 是GLIBC从2.27开始引入的机制,本质就是链表。 最近我在复现CISCN往年题目,刚好想仔细研究研究劫持等的原理是什么,于是就研究了一会。 过程 找ChatGPT要了一段申请删除堆块的示例…

六:Day05_Spring Security01

一、Spring Security引入 Spring Security 是一个功能强大且高度可定制的身份验证和访问控制(认证和授权)框架。它是保护基于 Spring 应用程序的事实标准。 2. 认证授权 认证授权实现平台所有用户的身份认证与用户授权功能。 2.1 什么是用户认证 认证…

关于pytorch中的dim的理解

今天碰到一个代码看起来很简单,但是细究原理又感觉好像不太通不太对劲,就是多维tensor数据的操作,比如:y.sum(dim2),乍一看很简单数据相加操作,但是仔细一想,这里在第3维度的数据到底是横向相加…

[OpenWrt]RAX3000一根线实现上网和看IPTV

背景: 1.我家电信宽带IPTV 2.入户光猫,桥接模式 3.光猫划分vlan,将上网信号IPTV信号,通过lan口(问客服要光猫超级管理员密码,具体教程需要自行查阅,关键是要设置iptv在客户侧的vlan id&#…

Zibll子比主题最新学习版

Zibll子比主题5.7.1是一款为WordPress平台设计的优秀主题。它具有独特而富有吸引力的设计风格,同时提供了丰富的功能和卓越的性能,使您的网站在众多网站中脱颖而出。以下是对Zibll子比主题5.7.1的详细介绍。 (这是我在“布谷鸟网址导航”上看…

minio可用性磁盘/节点故障恢复的研究

做poc真的很累。年初的报告拿出来按topic拿出来分享一下。 目的 通过模拟各类条件下的minio集群状态,确认minio是否符合官方“N/2硬盘在线,数据可读取;N/21硬盘在线,数据可读写”的描述。 同时通过停止minio集群中节点的服务停止…

Arris VAP2500 list_mac_address未授权RCE漏洞复现

0x01 产品简介 Arris VAP2500是美国Arris集团公司的一款无线接入器产品。 0x02 漏洞概述 Arris VAP2500 list_mac_address接口处命令执行漏洞,未授权的攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限,进而控制整个web服务器。 0x03 复现环境 FOFA…

AIGC与数据安全

数据安全是指保护数据不受非法或恶意的访问、使用、修改、泄露或破坏的能力。数据安全可能导致以下几个方面的问题: ✜ 数据泄露:AIGC可能泄露隐私信息,如姓名、地址、身份证号、银行账号等,危害用户安全和利益。AIGC可能生成包含…

OpenCV极坐标变换函数warpPolar的使用

学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为1702字,预计阅读4分钟 前言 前阵子在做方案时,得了几张骨钉的图片,骨科耗材批号效期管理一直是比较麻烦的,贴RFID标签成本太高,所以一般考虑还是…

07.Go 流程控制

流程控制是Go语言中必不可少的一部分,也是整个编程基础的重要一环。Go语言的流程控制语句和其他编程语言的流程控制语句有些不同,主要体现在Go语言没有do-while语句。Go语言常用的流程控制包括if语句、switch语句、for语句及goto语句等,switc…

涉密网络的IP查询防护策略

涉密网络的安全性对于维护国家、企业及个人的核心利益至关重要。在当今数字化时代,网络攻击日益猖獗,其中IP查询是攻击者获取目标信息的一种常见手段。本文将探讨涉密网络中防护IP查询的关键策略,以确保网络的机密性和安全性。 1. 专用VPN和…

一个文件下png,jpg,jpeg,bmp,xml,json,txt文件名称排序命名

#utf-8 #authors 会飞的渔WZH #time:2023-12-13 import os# 要修改的图像所在的文件夹路径 root_path rD:\images\lines2\3 # 要修改的图像所在的文件夹路径filelist os.listdir(root_path) #遍历文件夹 print(len(filelist)) i0for item in filelist:if item.endswith(.…

《点云进阶》专栏文章目录

目录 一、PCL进阶篇* 二、Open3D进阶篇 一、PCL进阶篇 * PCL 最小二乘拟合二维直线PCL 最小二乘拟合空间直线PCL 计算点云的倒角距离(Chamfer Distance)PCL 点云配准精度评价——点到面的均方根误差PCL 可视化八叉树PCL 计算Hausdorff距离PCL 从变换矩…

使用 Timm 库替换 RT-DETR 主干网络 | 1000+ 主干融合RT-DETR

文章目录 前言版本差异说明替换方法parse_moedl( ) 方法_predict_once( ) 方法修改 yaml ,加载主干论文引用timm 是一个包含最先进计算机视觉模型、层、工具、优化器、调度器、数据加载器、数据增强和训练/评估脚本的库。 该库内置了 700 多个预训练模型,并且设计灵活易用。…

winform使用CefSharp嵌入VUE网页并交互

1、NuGet添加CefSharp 如果下载慢或失败可以更新下载源 腾讯资源https://mirrors.cloud.tencent.com/nuget/华为资源https://repo.huaweicloud.com/repository/nuget/v3/index.json 2、将项目平台改为X64 3、在winform窗体添加cef using CefSharp; using CefSharp.WinForms; u…

【QT】时间日期与定时器

目录 1.时间日期相关的类 2.日期时间数据与字符串之间的转换 2.1 时间、日期编辑器属性设置 2.2 日期时间数据的获取与转换为字符串 2.3 字符串转换为日期时间 3.QCaIendarWidget日历组件 3.1基本属性 3.2 公共函数 3.3 信号 4.实例程序演示时间日期与定时器的使用 …

04.HTML其他知识

HTML其他知识 1.HTML实体 介绍 在 HTML 中我们可以用一种特殊的形式的内容&#xff0c;来表示某个符号&#xff0c;这种特殊形式的内容&#xff0c;就是 HTML 实体。比如小于号 < 用于定义 HTML 标签的开始。如果我们希望浏览器正确地显示这些字符&#xff0c;我们必须在…