stm32cubeide调试查看函数值_C语言: windows下VS Debug调试

news/2025/2/26 5:08:35

首先我先列出来常用的一些命令或者键盘控制:

F5 开始调试,执行到断点

Shift + F5 停止调试

F9 在光标所在行添加断点

Shift + F9 QuickWatch

Shift Ctrl F9 delete all 断点

F10 单步执行

F11 进入调用的函数

Shift F11 跳出这次调用的函数

另外还可以用Disable all breakpoints

可以右键点击添加breakpoint condition.比如 int i = 0; 条件可以是 i==5,或者 i has changed.如果 string str,则可以 strcmp(str,"onestring") ==0这样的。

对于 char *str ; str = "abcd";在 debug 过程中需要看 str 的内容,可以在 watch 中 str,4 就会显示下面连续的4个的内容了。

Ctrl F10 直接将debug执行跳到当前光标所指的行

在断点上右键breakpoint hit count 还可以设置

(1)当满足条件,而且进入断点的累计次数等于N时,断点命中一次。

(2)当满足条件,而且进入断点的累计次数是N的倍数时,断点命中一次。

(3)当满足条件,而且进入断点的累计次数大于N时,每次命中断点。

Breakpoint Filter 可以对机器、进程、线程做指定。

更加详细的调试命令可以在VS上查看到:

68abd95a8ae0996ab63531dfc8df6a05.png

首先我给出一份代码,我将带着代码来讲如何调试:

#include #include static int a;struct Demo{  int a;  char c;  int b;};void fun(struct Demo* p){  if (p->b > 1) {    printf("enter this line");  }  else {    printf("enter else line");    }}int main() {  struct Demo d;  int i = 0;  d.a = 1;  d.b = 2;  d.c = 3;   for (; i < 10; i++) {    d.a += i;  }  fun(&d);  return 0;}
  1. 开始调试:

    6e367177604ffd50c34ea9236060bfd2.png

2. 插入断点:

49f93bf8b579920376cfe2be2eb4f39d.png

或者,我插入一个条件断点:当i==8的时候,调试程序在此处断点暂停。

5c7eaec36b0ddab511f8f81063c282d3.png

3.如何查看d和i的值呢

我们有个监视栏,可以通过鼠标拖动代码里的变量到监视,或者直接在监视栏输入变量名

aaa4903c6678f6950a2972b98c174b0c.png如果是局部变量,你可以直接在局部变量窗口里查看。

a626c6914b5b82c63edf004eeba40d5d.png

好了,程序执行到这里,d和i的值我们都获取到了

07a9290974731d019a5f96e89343971a.png

可是在开发过程中,我们常常要修改某一个变量的值怎么办:

双击变量后边的值,或者右击鼠标选择编辑值。

ce76914ab10bedbd2696563c84b4305d.png

当然,我相信看到这里的读者肯定会对d的内存布局感兴趣,我们来看下d的成员地址,偏移:

a3de1a62e694ee3234bdfb50e8edb1f3.png

这里不难看出,Demo结构体的内存对齐规则,默认是4字节对齐,当然你可以通过程序来修改对齐方式。a占4自己,c虽然是字符类型只有1字节,但是由于后边的b是4字节,因此c也只能占用4字节,因此Demo结构体的占用字节大小为12.

查看堆栈信息:

接下来我们要进入到fun函数,我们可以在调用堆栈信息里查看当前的堆栈,以及执行到哪一层栈的第几行,这里能看到执行到函数fun(Demo* p)的第68行。

f51be3ba184ab79363e60db844d50085.png

对了,我想大家应该也注意到这里有个“断点”的标签页,可以通过这里查看并修改或者取消断点:

e1343faae7d43b2cdd83771313afe031.png


http://www.niftyadmin.cn/n/712257.html

相关文章

web前端学习(二十六)——CSS3组合选择符、伪类伪元素的相关设置

1.CSS组合选择符 CSS组合选择符包括各种简单选择符的组合方式。 在 CSS3 中包含了四种组合方式: 后代选择器(以空格 分隔)子元素选择器(以大于 > 号分隔&#xff09;相邻兄弟选择器&#xff08;以加号 分隔&#xff09;普通兄弟选择器&#xff08;以波浪号 &#xff5e…

java构造函数 代码块 静态代码块_静态代码块、非静态代码块、构造函数的执行顺序...

class"java" name"code">public class ExA {static {System.out.println("父类--静态代码块");}public ExA() {System.out.println("父类--构造函数");}{System.out.println("父类--非静态代码块");}public static void …

编译glibc2.19

有些软件可能要求系统的 Glibc 高于某个版本才可以正常运行。如果您的 Glibc 低于要求的版本&#xff0c;为了运行这些软件&#xff0c;您就不得不升级您的 Glibc 了 。您可以寻找已经编译好的 rpm 包或者使用源代码的方式升级 Glibc。下载glibcwget http://ftp.gnu.org/gnu/g…

VMware快照的工作原理(转)

VMware中的快照是对VMDK在某个时间点的“拷贝”&#xff0c;这个“拷贝”并不是对VMDK文件的复制&#xff0c;而是保持磁盘文件和系统内存在该时间点的状态&#xff0c;以便在出现故障后虚拟机能够恢复到该时间点。如果对某个虚拟机创建了多个快照&#xff0c;那么就可以有多个…

ios开发返回按钮消失_关于iOS导航栏返回按钮问题的解决方法

最近遇到一个关于导航栏返回按钮的问题&#xff0c;因为之前项目里面都是用的系统默认的返回按钮样式所以没有想过要去更改&#xff0c;后来有需要将返回按钮箭头旁边的文字去掉&#xff0c;同时将该返回按钮的点击事件重新定义。一开始尝试自定义按钮然后设置为leftBarButtonI…

java本地调用调试_远程调用cmd更新本地jar

/*** 重启完成更新*/publicboolean restart() {log.info("restart");String command "cmd /c start C:\\rct\\winsw\\rct\\update.bat";//测试String distName "dist";String jarName "rct-demo-1.0.jar";String bat;if (type.equals…

Toast实现源码解析

说明 本篇文章用于介绍Android中Toast的实现原理。和简单实现一个自定义的Toast. Toast实现 一般常用Toast格式为: Toast.makeText(context,"text.",Toast.LENGTH_LONG).show(); 就此&#xff0c;对Toast做一个了解.首先&#xff0c;Toast调用来了一个静态方法makeTe…

java fastjson解析json_java JSON解析库Alibaba Fastjson用法详解

本文实例讲述了java JSON解析库Alibaba Fastjson用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;Json是一种轻量级的数据交换格式&#xff0c;应该在一个程序员的开发生涯中是常接触的。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写…