VSCode C/C++(gdb)调试指南

news2024/11/20 3:23:19

1、安装插件

2、F5开启调试


左侧侧边栏->确保打开回调栈

右键函数栈->查看反汇编

3、打印寄存器、函数反汇编等


 

命令:

查看main反汇编

-exec disassemble /m main

查看寄存器

-exec info r

打印某个变量

-exec print s   或者 --s

打印寄存器,如pc

-exec print $pc

打印当前函数栈信息(当前执行位置)

-exec bt  或 -exec info f

        例如:#0 0x00007ff68e41156b in main (argc=1, argv=0xae15f0) at d:\dsoft\win_test.c:69

查看下一行代码

-exec si

打印程序栈局部变量

-exec info local

打印参数

-exec info args

特别强大的命令x,查看指定地址,格式化打印:

x命令的语法如下所示:

 

x/

 

n、f、u是可选的参数。

 

n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。

f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。

u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。

u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字节,g表示八字节。

 当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。

 

表示一个内存地址。

 

n/f/u三个参数可以一起使用。例如:

 

命令:x/3uh 0x54320表示,从内存地址0x54320读取内容,h表示以双字节为一个单位,3表示三个单位,u表示按十六进制显示。

例如:格式化打印 4个单位的字符串

-exec x/4s 0x7ff68e417000

输出如下:

0x7ff68e417000: "AAA Hello World"

0x7ff68e417016: "BBB Hello World"

0x7ff68e417022: "�������ݵ�ַ��x%08x\n"

0x7ff68e417037: ""

----

16进制格式化打印16个单位的

-exec x/16x 0x5ffe60

打印某变量地址

-exec p &buff

更多可以参见:https://www.cnblogs.com/chengliangsheng/p/3597010.html

-------------------------

附上一个C/C++ demo



#include <stdio.h>

#include <malloc.h>

 

int g_i = 100;

int g_j = 200;

int g_k, g_h;

 
int main(int argc, char *argv[])
{

    const int MAXN = 100;
    int *p = (int*)malloc(MAXN * sizeof(int));    
    static int s_i = 5;
    static int s_j = 10;
    static int s_k;
    static int s_h;

    
    int i = 5;
    int j = 10;
    int k = 20;
    int f, h;

    

    char *pstr1 = "magictong Hello World";

    char *pstr2 = "magictong Hello World";

    char *pstr3 = "Hello World";

    
    printf("堆中数据地址:x%08x\n", p);

    putchar('\n');
    printf("i 栈中数据地址(有初值):x%08x = %d\n", &i, i);

    printf("j 栈中数据地址(有初值):x%08x = %d\n", &j, j);

    printf("k 栈中数据地址(有初值):x%08x = %d\n", &k, k);

    printf("f 栈中数据地址(无初值):x%08x = %d\n", &f, f);

    printf("h 栈中数据地址(无初值):x%08x = %d\n", &h, h);

    

    putchar('\n');
    printf("s_i 静态数据地址(有初值):x%08x = %d\n", &s_i, s_i);

    printf("s_j 静态数据地址(有初值):x%08x = %d\n", &s_j, s_j);

    printf("s_k 静态数据地址(无初值):x%08x = %d\n", &s_k, s_k);

    printf("s_h 静态数据地址(无初值):x%08x = %d\n", &s_h, s_h);

    

    putchar('\n');

    printf("g_i 全局数据地址(有初值):x%08x = %d\n", &g_i, g_i);

    printf("g_j 全局数据地址(有初值):x%08x = %d\n", &g_j, g_j);

    printf("g_k 全局数据地址(无初值):x%08x = %d\n", &g_k, g_k);

    printf("g_h 全局数据地址(无初值):x%08x = %d\n", &g_h, g_h);

    

    putchar('\n'); 

    printf("pstr1 字符串常量数据地址:x%08x 指向0x%08x 内容为-%s\n", &pstr1, pstr1, pstr1);

    printf("pstr2 字符串常量数据地址:x%08x 指向0x%08x 内容为-%s\n", &pstr2, pstr2, pstr2);

    printf("pstr3 字符串常量数据地址:x%08x 指向0x%08x 内容为-%s\n", &pstr3, pstr3, pstr3);

    free(p);

    return 0;

}

本文参考了:

https://blog.csdn.net/weixin_43356770/article/details/135320408

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

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

相关文章

Git删除远程仓库某次提交记录后的所有提交

1、鼠标右键->git bash here&#xff0c;然后cd切换到代码目录&#xff1b; 2、git log查看提交记录&#xff0c;获取commit id 3、git reset commit id&#xff08;commit id指要保留的最新的提交记录id&#xff09; 4、git push --force&#xff0c;强制push 如果出现…

来自一个系统的自白

天空一声巨响&#xff0c;小炫我闪亮登场&#xff01;初次见面&#xff0c;给大家简单介绍下自己&#xff1a;我是炫我渲染私有云系统&#xff0c;是最新一代的智能渲染集群系统。可以进行私有化部署&#xff0c;在3dsmax、maya等软件中一键完成提交、上传、渲染、下载的任务&a…

强化学习第1天:马尔可夫过程

☁️主页 Nowl &#x1f525;专栏 《强化学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 ​​ 一、介绍 什么是马尔可夫过程&#xff1f;马尔可夫过程是马尔可夫决策过程的基础&#xff0c;而马尔可夫决策过程便是大部分强化学习任务的抽象过程&#xff0c;本文…

人机交互不是人机融合智能

一、人机交互和人机融合智能是两个不同的概念 人机交互是指人类与计算机之间的信息交流和操作方式&#xff0c;包括输入和输出界面、交互技术、用户体验等方面。人机交互的目标是提供用户友好的界面和自然的交互方式&#xff0c;使人类能够与计算机更加高效地进行沟通和协作。 …

BOM简介

1.1 常用的键盘事件 1.1.1 键盘事件 键盘事件触发条件onkeydown按键被按下时触发onkeypress按键被按下时触发onkeyup按键被松开时触发 注意&#xff1a;addEventListener事件不需要加on <script>//1. keydown 按键按下的时候触发,按任意键都触发&#xff0c;也可以识…

PhpPythonC++圆类的实现(OOP)

哎......被投诉了 &#x1f62d;&#x1f62d;&#x1f62d;&#x1f62d;&#x1f62d; 其实也不是小编不更&#xff0c;这不是期末了吗&#xff08;zhaojiekou~~&#xff09;&#xff0c;而且最近学的信息收集和ctf感觉好像没找到啥能更的&#xff08;不过最经还是在考虑更一…

Java中并发下的ThreadlocalRandom

1. 背景 在看同事写的代码的时候发现代码里有很多像&#xff1a; 如果我们想要生成一个随机数&#xff0c;通常会使用Random类。但是在并发情况下Random生成随机数的性能并不是很理想&#xff0c;今天给大家介绍一下JUC包中的用于生成随机数的类–ThreadLocalRandom.&#x…

领英Linkedin自动跳转中国站点的解决方案

linkedin放弃中国市场后&#xff0c;在国内打开linkedin.com&#xff0c;会自动跳转到 linkedin.cn&#xff0c;无法与国际友人在同一个平台上联系。 按照搜到的方法尝试解决&#xff0c;包括修改浏览器默认语言、清除浏览数据、使用软路由上的插件给 linkedin.com设置从国外线…

华为 1+X《网络系统建设与运维(高级)》认证模拟实验上机试题

华为 1X《网络系统建设与运维&#xff08;高级&#xff09;》认证模拟实验上机试题 一、考试背景二、考试说明2.1考试分数说明2.2考试要求2.3考试环境介绍2.4启动考试环境2.5保存答案(非常重要) 三、考试正文3.1注意事项3.2校区内&#xff08;LAN&#xff09;3.2.1任务 1&#…

深入浅出Go语言:匿名函数的原理和实践案例

深入浅出Go语言&#xff1a;匿名函数的原理和实践案例 引言匿名函数的基础实际应用案例一实际应用案例二性能考虑最佳实践与常见错误结语 引言 在Go语言的世界里&#xff0c;有一个功能强大且灵活的编程元素值得每位开发者深入了解——匿名函数。作为Go语言核心特性之一&#…

前端-基础 表格标签 - 基本使用及表头单元格 详解

基本使用 &#xff1a; 主要作用 &#xff1a; 即 主要 用于显示&#xff0c;展示数据&#xff0c;因为它可以让数据显示的非常的规整&#xff0c;可读性非常好。 特别是后台展示数据的时候&#xff0c;能够熟练运用表格就显得很重要。 一个清爽简约的表格能够把繁杂 的…

C2-4.3.1 多个决策树——随机森林

C2-4.3.1 多个决策树——随机森林 参考链接 1、为什么要使用多个决策树——随机森林&#xff1f; 决策树的缺点&#xff1a; A small change in the data can cause a large change in the structure of the decision tree causing instability 即&#xff1a;对数据集 中…

数据库:如何取消mysql的密码

因为调试MySQL数据接口&#xff0c;总是需要输入密码很烦&#xff0c;所以决定取消mysql的root密码&#xff0c; 网上推荐的有两种方法&#xff1a; 1、mysql命令 SET PASSWORD FOR rootlocalhostPASSWORD(); 2、运行 mysqladmin 命令 mysqladmin -u root -p password …

【源码阅读】交易池txs_pool

重要接口&#xff1a; ITxsPool的实现&#xff1a; type TxsPool struct {config TxsPoolConfigchainconfig *params.ChainConfigbc common.IBlockChaincurrentState *state.IntraBlockStatependingNonces *txNoncercurrentMaxGas uint64ctx context.Context //cance…

密码学(一)

文章目录 前言一、Cryptographic Primitives二、Cryptographic Keys2.1 Symmetric key cryptography2.2 asymmetric key cryptography 三、Confidentiality3.1 Symmetric key encryption algorithms3.2 asymmetric key block ciphers3.3 其他 四、Integrity4.1 secure hashing …

【语义解析:连接自然语言与机器智能的桥梁】

语义解析&#xff1a;连接自然语言与机器智能的桥梁 语义解析技术可以提高人机交互的效率和准确性&#xff0c;在自然语言处理、数据分析、智能客服、智能家居等领域都有广泛的应用前景。特别是在大数据时代&#xff0c;语义解析能够帮助企业更快速地从大量的数据中获取有用的…

Helix QAC 2023.4 新版支持C++20语言,带来更多性能提升!

Helix QAC 2023.4 新增功能 Helix QAC 2023.4全面支持MISRA C:2023规则&#xff0c;涵盖100%的指南。此版本还加强了对C20语言的支持&#xff0c;改进了数据流分析性能&#xff0c;并在整个产品中增加了多项用户体验改进。 增强的C20支持 此版本新增了对以下语言特性的支持&a…

永久关闭Windows更新的5种方法

很多家用电脑&#xff0c;如果系统自动更新的话&#xff0c;会变得越来越卡顿&#xff0c;且硬件型号兼容也并不完美。那么我们该如何彻底关闭Win11的自动更新呢&#xff1f;以下准备了5种方法&#xff0c;您可以根据自身实际情况选择合适的方法&#xff01; 一&#xff1a;使…

imgaug库指南(13):从入门到精通的【图像增强】之旅

引言 在深度学习和计算机视觉的世界里&#xff0c;数据是模型训练的基石&#xff0c;其质量与数量直接影响着模型的性能。然而&#xff0c;获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此&#xff0c;数据增强技术应运而生&#xff0c;成为了解决这一问题的…

【SPDK】【NoF】使用SPDK实现NVMe over Fabrics Target

本文使用两台PC&#xff0c;一台做NVMe over Fabrics Target&#xff08;服务端&#xff09;&#xff0c;一台做NVMe over Fabrics initiator&#xff08;客户端&#xff09;。首先使用SoftRoCE来实现底层的rdma传输&#xff0c;然后使用SPDK来实现NVMe over Fabrics Target。 …