首页 > 系统相关 >C语言: ---windows下VS Debug调试

C语言: ---windows下VS Debug调试

时间:2022-11-01 14:32:03浏览次数:40  
标签:字节 windows Demo C语言 --- int str 断点 调试


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


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上查看到:



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

#include <stdio.h>
#include <stdio.h>


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. 开始调试:



2. 插入断点:


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


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

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

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




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


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

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


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


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

查看堆栈信息:

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



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



标签:字节,windows,Demo,C语言,---,int,str,断点,调试
From: https://blog.51cto.com/u_14934686/5813661

相关文章

  • Redis:02---安装Redis(Linux+Windows+Docker)
    Linux安装:一、安装方式1(下载源码编译安装)第一步:从下面的网址中下载Redis最新稳定版本的源代码sudowgethttp://download.redis.io/redis-stable.tar.gz第二步:下载完之后解......
  • C语言学习:结构
    structnamect{charfmame[LEN];charlname[LEN];intletter;};全局创建结构,注意末尾有分号在main函数内创建结构1.1structnamect{charfma......
  • leetcode111-二叉树的最小深度
    111.二叉树的最小深度 这道题相比 104.二叉树的最大深度 还是难上一些的,但也不算太难。BFS/***Definitionforabinarytreenode.*structTreeNode{......
  • STC32G12K128-CAN
    第二部分,因为需要和其他部件通过CAN进行交互,此处记录一下STC32-CAN驱动部分,毕竟是国产芯片,数据手册看起来非常方便。希望咱们国产芯片越做越好哈此处参考了芯片手册的例子......
  • 动态规划-公共子序列
    公共子序列是二维动态规划的典型问题,一般用了求两个字符串的相似程度。我们看一个案例:案例1:给定两个字符串 text1和 text2,返回这两个字符串的最长公共子序列的长度......
  • ceph-slow ops
    https://zhuanlan.zhihu.com/p/440464163https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/3/html/troubleshooting_guide/troubleshooting-osds#slo......
  • 部署前端项目分离项目 - 部署
    本篇文章中部署《前后端分离项目》所需的所有部署工作 58Vue项目配置域名 59 手动替换localhost为虚拟机ip 60删除原有的dist目录 61执行打包命令 ......
  • 部署前端项目分离项目 - 准备工作
    0本篇文章中部署《前后端分离项目》所需的所有准备步骤 1设置虚拟机网络 2在VMware中开启虚拟机 3等待虚拟机开机  4虚拟机开机成功,进入到虚拟机的......
  • 动态规划-子序列
    子序列是序列的一部分,元素可以不连续。子串是字符串的一部分,必须连续。求子序列的和、连续递增子序列都是经典的一维动态规划问题。这一类题目都有差不多的思路,我们看案......
  • 拓端tecdat|R语言代写检验独立性:卡方检验(Chi-square test)和费舍尔精确检验分析案例
    统计测试最常见的领域之一是测试列联表中的独立性。在这篇文章中,我将展示如何计算列联表,我将在列联表中引入两个流行的测试:卡方检验和Fisher精确检验。什么是列联表?列联表提......