GDB Debug

  • 使用gdb带着参数启动程序

在gdb中启动程序并传递命令行参数:

gdb ./my_program  
(gdb) run arg1 arg2 arg3

这将在gdb中启动程序"my_program",并将参数"arg1"、"arg2"和"arg3"传递给程序。

在启动gdb之前,将参数存储在环境变量中,并在gdb中运行程序:

export MY_ARGS="arg1 arg2 arg3"  
gdb ./my_program  
(gdb) run $MY_ARGS

这将在gdb中启动程序"my_program",并将环境变量"MY_ARGS"中的参数传递给程序。

将参数存储在文件中,并在gdb中运行程序:

echo "arg1 arg2 arg3" > arguments.txt  
gdb ./my_program  
(gdb) run @arguments.txt

这将在gdb中启动程序"my_program",并将文件"arguments.txt"中的参数传递给程序。

gdb --args 命令用于指定要调试的程序的及其参数。该命令将程序和参数传递给 GDB(GNU Debugger),以便在调试会话中对其进行调试。以下是一个示例:

gdb --args program_name arg1 arg2 arg3

在上面的示例中,program_name 是要调试的程序的名称,arg1arg2 和 arg3 是程序的的可选参数。您可以在 gdb 命令后使用 --args 选项来指定程序和参数。在调试会话中,您可以使用其他 GDB 命令来检查和修改变量、观察程序执行流程等。

请注意,使用 --args 选项时,您需要确保在命令行中包含所有的程序参数,并且参数之间用空格分隔。如果参数包含空格或其他特殊字符,请使用引号将参数括起来。

例如,如果您的程序需要接受一个带引号的参数,您可以这样写:

gdb --args program_name "arg1 with quotes" arg2

这将把 "arg1 with quotes" 作为单个参数传递给程序,并将 arg2 作为另一个参数传递给程序。

注意,在使用这些方法时,您需要确保您的程序能够正确处理传递给它的参数。

  • gdb打印变量的值

print:打印变量的值。例如,print variable_name 将打印变量 variable_name 的值。

print /fmt variable_name:以指定的格式打印变量。fmt 可以是 f(十六进制浮点数)、o(八进制整数)、x(十六进制整数)或 d(十进制整数)。例如,print /f variable_name 将以浮点数格式打印变量 variable_name 的值。

  • gdb打印结构体变量或者结构体指针

打印结构体变量:

print struct_variable

这将打印结构体变量 struct_variable 的值。

打印结构体指针(或打印出结构体变量的所有成员):

print *struct_pointer

这将打印结构体指针 struct_pointer 所指向的结构体变量的值。

打印结构体指针的成员:

print struct_pointer->member_name

这将打印结构体指针 struct_pointer 所指向的结构体变量中成员 member_name 的值。

请注意,这些命令中的一些可能会因为所使用的GDB版本的不同而有所不同。如果您遇到问题,请参考GDB的文档或使用 help 命令获取更多帮助。

  • display 命令可以在 GDB 中显示变量的值。

可以使用以下语法

display variable_name

其中 variable_name 是您要显示的变量的名称。

例如,如果您要显示变量 x 的值,可以输入:

display x

每次程序停止时,GDB 将自动显示该变量的值。如果您想停止自动显示,可以使用 undisplay 命令。

此外,您还可以使用 display 命令显示表达式的值。例如:

display sizeof(int)

这将显示 int 类型的变量所占用的字节数。

display 命令与 print 命令类似,但它会自动显示变量的值,而不需要您每次手动输入。每次程序停止时,GDB 将自动显示该变量的值。如果您想停止自动显示,可以使用 undisplay 命令。

总的来说,print 命令用于手动显示变量的值,而 display 命令用于自动显示变量的值,特别是在调试会话期间经常使用。

在 GDB 的命令中,"/i" 选项用于以汇编格式显示指令。具体来说,它告诉 GDB 在显示指令时使用汇编语言。例如,使用 "x/i" 命令可以以汇编格式查看指定地址的指令。以下是一个示例:

(gdb) x/i 0x1234  
0x1234:    add    %eax,%eax

这将在地址 0x1234 上显示指令 "add %eax,%eax"。使用 "/i" 选项,GDB 会将指令以汇编语言形式显示,而不是以二进制形式显示。

display /i $pc :当用户想check 最后的崩溃点是,需要让栈处于 0号上下文, 然后输入该命令,

会显示出崩溃指令的内容(/20i, 以指令形式显示 pc指针及后续20行的汇编指令的内容)

(gdb) display /20i $pc1: x/i $pc=> 0x686042 <hal_i2c_mst_write+258>: ldrb r3, [r7, r5]... ...

再对应 info r 的输出结果,可以看到是什么数值最终引发了错误

  • gdb disassemble

disassemble 命令是 GDB(GNU Debugger)中的一个功能,用于显示当前函数的汇编代码。它可以将机器指令转换成易于阅读的汇编代码,以便于调试和分析程序。

要使用 disassemble 命令,您需要在 GDB 调试会话中进入您想要查看汇编代码的函数。然后,您可以输入 disassemble 或 dis 命令,再加上函数名称或函数地址。例如:

(gdb) disassemble main

这将显示函数 main 的汇编代码。您还可以使用函数地址来显示指定函数的汇编代码,例如:

(gdb) disassemble 0x1234

这将显示地址为 0x1234 的函数的汇编代码。

请注意,disassemble 命令可能因所使用的 GDB 版本而有所不同。如果您遇到问题,请参考 GDB 的文档或使用 help 命令获取更多帮助。

  • x 查看内存中的内容

x 命令是 GDB(GNU Debugger)中的一个命令,用于查看内存中的内容。该命令可以用于查看程序中的变量、数据和代码等。

x 命令的语法如下:

x/[N][SIZE] ADDRESS

其中,N 表示要查看的内存单元的数量,SIZE 表示每个内存单元的大小,ADDRESS 表示要查看的内存地址。

例如,要查看地址为 0x1234 的 4 个字节(一个整数)的值,可以输入:

x/i 0x1234

这将显示地址为 0x1234 的指令。

又如,要查看地址为 0x1234 的一个字(4 个字节)的值,可以输入:

x/4wx 0x1234

这将显示地址为 0x1234 的 4 个字(16 个字节)的值。

还可以使用 / 或 // 前缀来指定要查看的地址。例如,要查看地址为变量 x 的值,可以输入:

x/x &x

这将显示变量 x 的值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/21686.shtml

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

相关文章

后端进阶之路——浅谈Spring Security用户、角色、权限和访问规则(三)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★前端炫酷代码分享 ★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ 解决算法&#xff0c;一个专栏就够了★ ★ 架…

代码随想录算法训练营day48

文章目录 Day48 打家劫舍题目思路代码 打家劫舍II题目思路代码 打家劫舍 III题目思路代码递归去偷动态规划法&#xff08;状态标记递归&#xff09; Day48 打家劫舍 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 题目 你是一个专业的小偷&#xff0c;计划偷窃沿街…

两数相加 II

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数字都不会以零开头。 示例1&#xff1a; 输入&#xff1a;l1 [7,2,4,3], l2 [5,6,4] 输…

什么是 webpack?

Webpack 介绍 什么是 webpack&#xff1f; :::tip 官方描述 webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具。当 webpack 处理应用程序时&#xff0c;它会在内部从一个或多个入口点构建一个 依赖图(dependency graph)&#xff0c;然后将你项目中所需的每一个…

【SCSS】网格布局中的动画

效果 index.html <!DOCTYPE html> <html><head><title> Document </title><link type"text/css" rel"styleSheet" href"index.css" /></head><body><div class"container">&l…

C 语言高级2-多维数组,结构体,递归操作

1. 多维数组 1.1 一维数组 元素类型角度&#xff1a;数组是相同类型的变量的有序集合内存角度&#xff1a;连续的一大片内存空间 在讨论多维数组之前&#xff0c;我们还需要学习很多关于一维数组的知识。首先让我们学习一个概念。 1.1.1 数组名 考虑下面这些声明&#xff1…

react中使用redux-persist做持久化储存

某天下午折腾着玩的 – 笔记 安装相关依赖 npm install reduxjs/toolkit redux-persist redux react-redux// store.jsx import { configureStore, getDefaultMiddleware } from "reduxjs/toolkit"; import { persistStore, persistReducer } from "redux-per…

无涯教程-Lua - 调试语句

Lua提供了一个调试库&#xff0c;该库提供了所有原始函数供无涯教程创建自己的调试器。即使没有内置的Lua调试器&#xff0c;也有许多针对Lua的调试器&#xff0c;这些调试器由各种开发人员创建&#xff0c;其中许多开源。 下表列出了Lua调试库中可用的函数及其用法。 Sr.No.…

Apache RocketMQ 命令注入

漏洞简介 RocketMQ 5.1.0及以下版本&#xff0c;在一定条件下&#xff0c;存在远程命令执行风险。RocketMQ的NameServer、Broker、Controller等多个组件外网泄露&#xff0c;缺乏权限验证&#xff0c;攻击者可以利用该漏洞利用更新配置功能以RocketMQ运行的系统用户身份执行命令…

论文阅读- Uncovering Coordinated Networks on Social Media:Methods and Case Studies

链接&#xff1a;https://arxiv.org/pdf/2001.05658.pdf 目录 摘要&#xff1a; 引言 Methods Case Study 1: Account Handle Sharing Coordination Detection 分析 Case Study 2: Image Coordination Coordination Detection Analysis Case Study 3: Hashtag Sequen…

k8s手动发布镜像的方法

kubectl edit deploy编辑对应的文件&#xff0c;并:wq!保存即可

2023年第四届“华数杯”数学建模思路 - 案例:FPTree-频繁模式树算法

## 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模式树算法&#xff0c;他与Apriori算法一样也是用来挖掘频繁项集的&#xff0c…

互联网摸鱼日报(2023-08-03)

互联网摸鱼日报(2023-08-03) 36氪新闻 飞行汽车风口来了&#xff0c;什么时候我能坐上&#xff1f; 小红书的本地生活&#xff0c;还在玩票期 并行科技8月8日北交所上会&#xff0c;主营业务为超算云服务和算力运营服务 群玉山咨询马晓波&#xff1a;新消费品牌如何通过赛道…

21.Netty源码之编码器

highlight: arduino-light Netty如何实现自定义通信协议 在学习完如何设计协议之后&#xff0c;我们又该如何在 Netty 中实现自定义的通信协议呢&#xff1f;其实 Netty 作为一个非常优秀的网络通信框架&#xff0c;已经为我们提供了非常丰富的编解码抽象基类&#xff0c;帮助我…

sklearn 转换器和预估器

刚学习sklearn时&#xff0c;没分清转换器的fit&#xff08;&#xff09;和模型训练的fit&#xff08;&#xff09;&#xff0c;还以为是一个&#xff0c;结果学完了回过头来&#xff0c;才发现这些差异。再此记录一下。 一、 sklearn 转换器和预估器 转换器&#xff08;Trans…

Java--学生管理系统

本案例基于Java语言中的ArrayList集合来储存数据&#xff0c;并建立两个类——学生类和用户类存储在集合中&#xff0c;通过用户交互&#xff0c;搭建简单的学生管理系统。 1、学生类 学生类利用set函数进行获取学生单个信息&#xff0c;show函数负责获取全部信息。 package …

LCD驱动芯片VK1024B兼容HT系列驱动芯片,体积更小

产品型号&#xff1a;VK1024B 产品&#xff1a;VINKA/永嘉微电 封装形式&#xff1a;SOP16 产品年份&#xff1a;新年份 工程服务&#xff0c;技术支持&#xff0c;用芯服务 VK1024概述&#xff1a; VK1024B 是 24 点、 内存映象和多功能的 LCD 驱动&#xff0c; VK1024B …

Nginx实现反向代理和负载均衡

Nginx安装 本文章主要介绍下&#xff0c;如何使用Nginx来实现反向代理和负载均衡&#xff0c;Nginx安装和基础知识&#xff0c;可参考我的这篇文章 Nginx安装。 Nginx实现反向代理 实现反向代理需要准备两台Nginx服务器。一台Nginx服务器A&#xff0c;ip为 192.168.206.140&…

MySQL主从复制入门指南:基础概念和配置步骤

文章目录 前言一、问题分析二、Mysql主从复制1. 介绍2. 配置3. 测试 三、读写分离案例1. 背景2. shardingDBC介绍3. 入门案例4. 功能测试 总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开始发布一些学习笔记类的博客&#xff0c;方便日后回顾。当然&#xff0c;如果能帮…

基于freertos的温湿度蓝牙系统

前言&#xff1a;本项目主要是基于freertos的小项目&#xff0c;目的是为了巩固近期学习的知识&#xff0c;功能较简单&#xff0c;可自行扩充。 一、项目基本架构 项目基本功能&#xff1a;通过STM32单片机的freertos操作系统&#xff0c;将温湿度数据显示在oled屏幕上&#…