前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言: ---windows下VS Debug调试

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

作者头像
用户3479834
发布2021-02-03 12:22:12
9790
发布2021-02-03 12:22:12
举报
文章被收录于专栏:游戏开发司机游戏开发司机

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

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

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

代码语言:javascript
复制
#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行。

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 游戏开发司机 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档