[C++]debug介绍+debug时如何查看指针指向内存处的值

一、简介

预备工具和知识:使用使用VSCode使用Debug。
本文简介:本文将简要介绍debug中ContinueStep OverStep IntoRestart的功能。并介绍如何在debug时查看动态内存地址(指针)的值;

二、Debug介绍

1. 设置断点:

  • 设置普通断点:
    使用鼠标在编辑框左侧左击即可设置一个断点,当在debug模式下运行时,当程序运行到此处会暂停。
    如下图所示:
    在第7行处设置一个断点
    使用debug模式运行,程序运行到断点处会暂停,如下图所示。
    程序运行到断点处暂停
  • 设置条件断点:
    我们可以设置一些条件断点,指定在特定条件下断点生效。例如,我们在int b = 1;处设置一个断点,并设定当a==1时,该断点生效。
    首先我们在第7行处设置一个普通断点,然后右击断点,选择Edit Breakpoint,再在编辑框里输入a==1如下图所示:
    设置条件断点
    此时只有当变量a等于1时,第7行的断点才生效(此时代码中a等于0,不满足条件,因此此断点不生效)。我们依旧选择debug模型运行程序,结果如下:
    使用条件断点
    我们会发现,此时程序会直接运行结束,不会在断点处暂停。假如我们将代码中的第6行改为:int a=1;,令变量a等于1,再运行一次,会发现程序在断点处暂停了。这说明我们设置的条件断点只有当a等于1时才生效。
    条件断点生效

2. Debug各按钮介绍:

  • Continue:在当前断点处暂停时,点击 Continue 会继续运行程序,并在下一个断点处暂停(如果有下一个断点,并能运行到该断点处的话)。
  • Step Over:单步执行:若当前行代码为函数,则会直接运行完当前行的函数,不进入该函数内部。若当前行代码为其他语句,则直接运行完当前行语句。并在下一行处暂停。
  • Step Into:单步执行:若当前行代码为函数,则会进入该函数内部继续单步执行。若当前行代码为其他语句,则直接运行完当前行语句。并在下一行处暂停。
  • Step Out:若此时是经过Step Into到某子函数内部时,点击Step Out会直接运行完当前子函数,并跳转到上层函数处继续单步执行。若在此之前没有经过Step Into,则该功能无效。
  • Restart:重新运行程序。

三、查看动态分配的内存变量

在debug时,对于简单变量、数组变量可以在左侧的VARIABLES窗口里看到变量的值,但是对于指针类型的变量我们只能看到指针的值(地址),不能看到指针所指向的内存位置里的值。如下图所示:
查看变量
从上图中可以看出,对于简单变量a和数组变量b可以直接查看内存中的数值,而对于指针p只能看到其中的的地址,无法看到指针指向的地址里的数值。
我们可以使用以下两种方法查看指针p指向位置处的内存值:

1. 使用*pointer@size查看指针处的值

VARIABLES窗口处右击p,点击Add to watch,点击完完成后会在WATCH窗口里显示此时正在监视变量p,如下图所示:
将p加入watch在WATCH窗口内监视变量p
然后在WATCH窗口右击p选择Edit Expression,将p修改为*pointer@size的格式,由于申请p时申请了5个int型变量的内存,因此size=5。那么我们将WATCH窗口中的p改为*p@5,如下图所示,即可查看p指向的内存处的值:
使用8pointer@size形式查看指针处内存的值

2. 使用*(type(*)[size])pointer将指针转为数组变量

我们也可以将指针p强制转为数组类型,然后查看p处内存的值。与前面类似,只不过此时需要将WATCH窗口里的p改为*(type(*)[size])pointer格式,对于int* p=int[5],我们需要改为*(int(*)[5])p,如下图所示,可以看到使用该方法也可查看p指向的内存处的值:
使用*(type(*)[size])pointer格式查看指针处内存的值

四、参考引用

[1]. debug 调试——step over、step into、step out 的区别
[2]. VScode调试c代码时,如何显示动态分配的指针数组

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值