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

debug-vscode调试方法

debug - vscode gdb调试指南

文章目录

  • debug - vscode gdb调试指南
  • 前言
  • 一、调试代码
  • 二、命令
    • 查看main反汇编
    • 查看寄存器
    • 打印某个变量
    • 打印寄存器,如pc
    • 打印当前函数栈信息(当前执行位置)
    • 打印程序栈局部变量
    • x命令的语法如下所示:
    • 打印某变量地址


前言

参考:VSCode C/C++(gdb)调试指南

命令参考:
https://www.cnblogs.com/chengliangsheng/p/3597010.html

一、调试代码

 #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;}

二、命令

查看main反汇编

-exec disassemble /m main
在这里插入图片描述

查看寄存器

-exec info r
在这里插入图片描述

打印某个变量

-exec print s 或者 --s
在这里插入图片描述

打印寄存器,如pc

-exec print $pc
在这里插入图片描述

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

-exec bt 或 -exec info f
在这里插入图片描述

打印程序栈局部变量

-exec info local
在这里插入图片描述

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表示按十六进制显示。
在这里插入图片描述

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

-exec x/16x 0x5ffe60

打印某变量地址

-exec p &buff
在这里插入图片描述

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

相关文章:

  • Cypher进阶(函数、索引)
  • XML Schema 数值数据类型
  • Window获取界面空闲时间
  • Java进阶(vue基础)
  • Mac电脑上好用的压缩软件
  • Ubuntn24.04安装
  • 基于ansible部署elk集群
  • 解锁.NET Fiddle:在线编程的神奇之旅
  • 记录pve中使用libvirt创建虚拟机
  • 【HTML性能优化】提升网站加载速度:GZIP、懒加载与资源合并
  • 三维空间全局光照 | 及各种扫盲
  • 数据库开发常识(10.6)——SQL性能判断标准及索引误区(1)
  • 网络爬虫js逆向之某音乐平台案例
  • Spark--算子执行原理
  • 事件驱动架构(EDA)
  • C++ 入门速通-第5章【黑马】
  • 2025春招,深度思考MyBatis面试题
  • 排序算法--冒泡排序
  • 简易C语言矩阵运算库
  • 通过C/C++编程语言实现“数据结构”课程中的链表
  • 【分布式架构理论3】分布式调用(2):API 网关分析
  • 基于Kamailio、MySQL、Redis、Gin、Vue.js的微服务架构
  • 6S模型的编译问题解决
  • C++11详解(二) -- 引用折叠和完美转发
  • 实验十四 EL和JSTL
  • 为什么在springboot中使用autowired的时候它黄色警告说不建议使用字段注入
  • DeepSeek大模型介绍、本地化部署与使用!【AI大模型】
  • 备考蓝桥杯嵌入式4:使用LCD显示我们捕捉的PWM波
  • 智能化转型2.0:从“工具应用”到“价值重构”
  • 机器学习之数学基础:线性代数、微积分、概率论 | PyTorch 深度学习实战