对于一些疑难小问题,调试是不可避免的,很多时候我们想要跟踪程序发生了什么,每一步的值发生了哪些变化,这个时候查看监视窗口就显得很方便了。在C/C++里面,有些小伙伴对指针感到比较头痛,那我们就以指针为例来调试。

监视窗口可以查看调试的值,编译器需要选择GDB/CDB
Debug-->Active debuggers-->GDB/CDB debugger:Default 

如果没有看到需要选择的编译器的话,可能需要进行配置:
Settings-->Debugger...-->GDB/CDB debugger(Default)
选择执行路径:D:\Program Files (x86)\CodeBlocks\MinGW\gdb32\bin\gdb32.exe
这个取决于你的安装地址

在需要查看的地方断点,然后点击红色按钮(F9),以及右边第三个有步进按钮(Step into),进行每步的调试,如果没有出现窗口,就点击Debug-->Debugging windows,选择Watches,或者直接就点击一个“”的小图标再选择Watches。

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<typeinfo>using namespace std;int main()
{int  a=3;int& b=a;//对a的引用int& c=b;//也可以对引用b再做引用cout<<a<<" "<<b<<" "<<c<<endl;//3 3 3
}

现在我们修改a的值,做一个断点,然后调试看下窗口里面的这些变量会出现什么变化。

    int  a=3;int  a1=a;int& b=a;//对a的引用int& c=b;//也可以对引用b再做引用cout<<a1<<" "<<a<<" "<<b<<" "<<c<<endl;//3 3 3 3a=8;cout<<a1<<" "<<a<<" "<<b<<" "<<c<<endl;//3 8 8 8

可以看出,a1是拷贝了一份a的值,所以a的修改不会更改a1的值,其余的b和c变量的值都自动变化了,这也可以看出b,c只是a的引用,换句话说只是a的一个别名,a的值更改,也引起了指向它的引用的值发生更改。
再看一例,两个值交换的一个函数,参数使用引用类型

void exchange(int& x,int& y)
{int i;i = x;x = y;y = i;
}
int main()
{int z1=11;int z2=22;exchange(z1,z2);cout<<z1<<" "<<z2<<" "<<endl;//22 11
}

上面一步一步的步进调试,可以看出整个函数交换的操作步骤。

下面再看下指针,其实指针就是内存地址的叫法,不要想复杂,甚至指向指针的指针,也只是这个指向内存地址的一个内存地址。
int* 这个就是一个指针(内存地址),既然是地址,那赋值肯定也需要是地址,那就获取a的内存地址,&a,或叫取地址,赋值即可,是不是很简单。

    int* p;p = &a;//取地址cout<<p<<endl;//这个就是a的内存地址cout<<*p<<endl;//8cout<<typeid(p).name()<<endl;//Pi

        调试窗口是不是很清楚的显示了,p指向了a的内存地址,顺便说下,这个p在没有获取a的地址之前,会随机初始化一个地址,如果使用的话就成了”野指针”。使用完了之后free,但是没有置位NULL的话,也是个“野指针”,因为清空的只是指向的内存,而本身的这个地址还在的,这个需要注意。

 int* p=NULL;故这样初始化NULL是正确的操作,初始化的内存地址就是0x0

留给大家一个二级指针的例子,自己可以去调试下:

    int** pp;pp = &p;cout<<pp<<endl;cout<<*pp<<endl;cout<<typeid(pp).name()<<endl;//PPi

通过调试可以更加理解内存地址和值的变化,熟悉指针以及规范使用,不要造成“野指针”!

CodeBlocks监视窗口(Watchs)进行调试(引用类型与指针)相关推荐

  1. Visual Stdio 2022如何打开监视窗口?

    编译器使用:Visual Stdio 2022 文章目录 一.为什么要使用监视窗口? 二.使用步骤 1.调试 2.打开监视窗口 3.输入需要监视的变量 如有问题请指正,谢谢! 一.为什么要使用监视窗口 ...

  2. VC的监视窗口等调试窗口的使用

    一.监视窗口 1.配置应用程序,使应用程序处于调试状态. 2.点击"调试"----"窗口"----"监视"----"监视1&quo ...

  3. 监视窗口添加 $err,hr 一行来实时现实错误

    在Visual C++ 中,可以在监视窗口添加 $err,hr 一行来实时现实错误.调试过程中,该项相当于在每次调用API函数之后调用GetLastError函数.其值由两部分组成,一个是错误代码(十 ...

  4. VS中监视窗口,即时窗口和输出窗口的使用

    以下内容来自:http://shashoutian2005.blog.163.com/blog/static/1685415200971845843605/ 一.监视窗口 1.配置应用程序,使应用程序 ...

  5. LabVIEW(2014)探针监视窗口打不开/消失 解决办法

    LabVIEW(2014)探针监视窗口 由于设定为总在其他窗口前面,所以有时在关闭后再打开时,明明任务栏上显示了窗口后,但是怎么也切换不到窗口. 解决办法很简单: 1.把鼠标移动到任务栏"探 ...

  6. vs2013如何调用监视窗口实现调试(如何打断点、逐步调试、逐过程调试、退出调试、条件调试)

    目录 1.打断点进入调试窗口 2.F11逐步调试,F10整过程调试,shift+F5退出调试 3.条件调试 1.打断点进入调试窗口 双击代码前的空白即可,再次双击取消断点. 2.F11逐步调试,F10 ...

  7. codeblocks安装、使用、调试教程

    一:下载 官方下载地址 二:安装 运行codeblocks-20.03mingw-setup.exe或FossHUB.界面如下: 点击"Next >" 点击"I A ...

  8. CodeBlocks编译环境配置及调试问题

    CodebBocks官网下载自带编译器的安装包(安装过程不赘述) CodeBlocks下载及安装链接 值得注意的是,安装完成成后首次点开必须选择默认编译环境.选择如下图框选的GNU GCC,然后点击确 ...

  9. VScode像Codeblocks一样,不启动调试和Debug直接运行

    要是配置C++ 编译环境,这边走 用了VScode童鞋,都知道,写C++是不保留窗口的,除非打上断点或者: system("pause"); 这里给大家分享一种不需要,F5或者Ct ...

最新文章

  1. Android程序完全退出的三种方法
  2. 引争议!硕导提议高校教师应多配偶,这样就能多生娃!高校的处理通报来了...
  3. R语言绘制三维散点图
  4. Python解决The truth value of a Series is ambiguous.md
  5. python filter函数 字符串_Python数组条件过滤filter函数使用示例
  6. Silverlight初级教程-库
  7. SegmentFault 创始人祁宁对话 C# 之父 Anders Hejlsberg
  8. java批处理 异常处理_Java批处理教程
  9. mac 查看端口并终结
  10. c语言字符串传给swift,如何把字符串数组从 Swift 传递给 C
  11. 重装linux服务器简易流程
  12. sql组合键设置外键_学习SQL:外键
  13. 人群与网络:博弈论基本概念
  14. unity的下载与安装
  15. hybird app混合开发介绍
  16. 移动端H5调起第三方APP
  17. mzy git学习,删除文件(三)
  18. 孙子兵法——02 作战第二
  19. 阿基米德螺旋线原理及代码
  20. 2019年伯克利大学 CS294-112《深度强化学习》第1讲:课程介绍和概览(笔记)

热门文章

  1. 电商支持类API可为电商卖家提高营收的12种方式
  2. k860i 4.2root成功,用root大师20130705
  3. 实践出真知:大乱斗游戏
  4. 在互联网大厂的程序员多久能挣够100万?
  5. 人工智能快速发展 计算机视觉产品打造智能社会“入口”
  6. 开源项目SMSS发开指南(三)——protobuf协议设计
  7. SMSS.EXE病毒处理
  8. HDU-4069(Squiggly Sudoku)(Dancing Links + dfs)
  9. 【Python】Pyyaml和ruamel.yaml
  10. php-fpm安装,启动,重启