一、简介

  这篇文章我主要会介绍CodeBlocks的调试功能,并简单讲述如何使用它。

二、前言

  大家好,最近和小伙伴们讨论修改程序的时候,我突然想到,授人以鱼不如授人以渔(指调试),于是这篇文章应运而生,当然了,这是笔者第一次写博客并发表,如果有错误或者可以改进的地方,欢迎探讨。

三、什么是调试?

  在写程序的过程中会不可避免的产生BUG,而这个时候调试器就是提升解决问题效率的好工具了,它能够快速的定位到BUG的位置,并极大极大的提升你优化和修改程序的效率。

四、在CodeBlocks中如何进行调试

  1调试的目的

  调试的目的主要是跟踪变量值,观察程序是否按预期的情况在执行,如果遇到变量值与预期不符,则问题就出现在之前的语句。在调试之前,需要考虑可能有问题的代码段,在此代码段之后设置断点。

  1.1创建一个项目

  调试功能只能在项目中使用,单独打开一个文件是不行的,而且项目路径不能包含中文,否则会导致问题。

  1.2完成程序的编写

  为了体现调试的功能,我写了个包含常见错误的程序,程序的功能是调用函数实现a+b,函数结果存于c中,并输出c的值。

  1.3设置断点

  轻轻的在行号的右边点一下就可以了,这个小红点就是断点,调试时程序执行到这一行会自动停止,如果要取消这个断点则点击一下那个小红点(调试的时候取消是没用的)。

  1.4进行调试

  首先介绍一下我们将要使用的功能。

  从左向右分别介绍:

  ①调试\继续。这个就是开始调试的按钮,当然,在没有设置断点的时候是不会停下来的,继续功能是指让程序继续运行,直到下一个断点或者输入数据。

  ②执行到光标处。本质上同样是开始调试,但是这个调试是从你点击的地方开始的,如图所示,我使用这个功能前把光标放在了(就是鼠标点到了)12行,现在它是从13行开始调试,而不是从断点开始,这里我加了一行代码,不过无关紧要。

  ③下一行。功能为执行本行代码,在开始调试后,我们需要逐行调试代码时,就需要它了,继续上一张图,点了一下之后输出了lalalala,并且黄色光标移到了下一行,值得注意的是,执行到cin的时候,我们需要输入数据之后才能继续,不输入数据只戳下一行是没用的哈。

  ④跟进。作用为黄色光标指向函数的时候,使用这个功能就能执行进入函数内部,

  ⑤跟出。字面意思,与跟进相反,可以从函数里跳出。

  ⑥下一条指令。如果一行里面有多个指令(如int a;int b;)就是逐个指令运行。

  ⑦step into instruction没怎么用到过,不怎么了解。

  ⑧同上,也不怎么用到。

  ⑨停止调试器。字面意思。

  ⑩调试窗口。开始调试之后打开,核心功能都在里面了,各有各的功能,其中监视比较重要,可以显示各个数据的值,其他笔者用得比较少,感兴趣可以去查阅相关资料。

  如图所示,使用监视之后可以看见各个值的量,随着你的逐行调试也可以看见它们什么时候发生了变化,右键点击变量也可以把他们添加到监视中去。在这个程序中,可以看见c的值从头到尾都没变过,可以判断是c的引用的问题,修改后就搞定了。

  下图为修改后的调试

  1.5复杂一点的例子

  这里以一个二叉树的节点为例子

  按住CONTROL键点“...”按钮可以看见这个结构体里变量的值。

  *T->lchild可以访问T的左子树,以此类推可以推出这棵树所有节点的值。(就是有点麻烦,希望知道更好办法的大佬可以说一下有没有更好的办法)

  1.6 VScode中的使用

  同样以刚才的二叉树为例子,VScode中的调试与CodeBlocks中大致相同,只是它在鼠标指上去的时候就会显示值,点击箭头就可以展开,看见指针指向的结构体的值。

  可以看见VScode确实挺香的。(笑)

五、后记

调试功能不仅仅于此,不仅可以使用图形界面调试,还可以使用命令行来进行调试,不过对于目前阶段的学习(指本科)不是很需要这方面的知识。

希望大家都能有所收获,感谢大家读完本文!

2021/11/30 21:18 AwakeFantasy

如何用CodeBlocks调试?的更多相关文章

  1. 如何用VS调试不属于解决方案的EXE和DLL程序

    如果你手里有一个现成的EXE, 以及EXE相关联PDB文件, 还有相关联的CPP文件和H文件. 你如何用VS调试? (当然你可以选择WinDbg.不过这里就讨论VS) 你或许想问我干嘛不从一开始就用V ...

  2. 【基础】CodeBlocks调试器基本使用方法

     CodeBlocks是一个开放源码的全功能的跨平台C/C++集成开发环境. 下载地址:http://www.codeblocks.org/downloads/26 其中,Windows环境下可以使用 ...

  3. 如何用 fiddler 调试线上代码

    有时代码上线了,突然就碰到了坑爹的错误.或者有时看别人家线上的代码,对于一个文件想 fork 下来试试效果又不想把全部文件拉到本地,都可以使用 fiddler 的线上调试功能. 比方说我们打开携程的首 ...

  4. codeblocks调试快捷键说明

    使用codeblocks避免不了快捷键: 在调试程序的时候: 首先在view->toolbar->debugger调出来:快捷方式可以自己看 RUN to Cursor  :F4 单步调试 ...

  5. 关于codeblocks调试错误

    对于出血编程者,当代码有错误时,可能大家一般都是在程序的变量操作之后输出变量的值,但是这种方法较麻烦,工作量较大,也无法很快的找出错误,因此运用编程软件调试错误就显得尤为重要,刚才写啦一个代码,运用直 ...

  6. Windows下Codeblocks调试Cocos2d-x项目体验(一次失败的体验)

    很久之前的一篇文章有介绍过在Ubuntu下安装Cocos2d-x3.11并使用Codeblock调试Cocos2d-x程序:http://www.cnblogs.com/moonlightpoet/p ...

  7. CodeBlocks调试器设置错误问题

    错误如下: Building to ensure sources are up-to-date Selecting target:  Debug ERROR: You need to specify ...

  8. codeblocks 调试不停止的解决办法。

    CB的工程路径不能有中文,也不能有空格. 所以一定要全英文路径,而且空格要用下划线代替. 否则,调试的时候,codeblocks不会在断点处停止.

  9. codeblocks 调试

    codeblocks 调试工具使用的注意事项: 1.codebloccks 调试,必须要在一个项目下才可以,也就是说“单独的文件是不能运行debug工具的” 2.项目的目录文件名必须是全英文,同时文件 ...

随机推荐

  1. 博主日常工作中使用的shell脚本分享

    前言: 今天给大家分享一篇在我工作中常用的一个shell脚本,里面有一些我们常用到的shell操作.该脚本用于本地电脑和服务器交互上,实现以下功能: 自动拉取自己个人电脑上的源码到服务器上yocto包 ...

  2. Python-Unittest多线程生成报告

    前言 selenium多线程跑用例,这个前面一篇已经解决了,如何生成一个测试报告这个是难点,刚好在github上有个大神分享了BeautifulReport,完美的结合起来,就能生成报告了. 环境必备 ...

  3. 菜鸡的Java笔记 第十六 - java 引用传递

    referenceDelivery    引用传递是整个java 的精髓,也是所有初学者最难学的地方        引用的本质:同一块堆内存可以被不同的栈内存所指向    下面通过三道程序来进行引用传 ...

  4. Spring Boot核心注解

    (1)@SpringBootApplication 代表SpringBoot的启动类 (2)@SpringBootConfiguration 通过bean对象来获取配置信息 (3)@Configura ...

  5. [bzoj5511]大中锋的游乐场

    记可乐为1,汉堡为-1,即求过程中绝对值不超过k的最短路. 然后发现k的范围仅为10,也就是说过程中合法的值仅有21种,因此跑一遍dij或spfa(嘿嘿嘿)即可. 1 #include<bits ...

  6. [JS高程] 特殊的原始值类型

    目录 原始值包装类型 (特殊引用类型) 原始值包装类型和应用类型的区别 原始值包装类型 (特殊引用类型) 在ES6 时,ECMAScript 数据类型是这样去分类的: 原始值(基本数据类型) Numb ...

  7. Redis基本数据类型底层数据结构

    Redis数据类型底层数据结构 Redis目前基本的数据类型有String.List.Set.ZSet.Hash五种,首先Redis是C语言开发的,所以底层就是用C语言封装数据结构或者C语言本身提供的 ...

  8. c语言指针学习笔记

    指针变量就是存放内存地址的变量.c语言中使用 int *pa; 的方式来定义指针. ` main() int a = 10, b=20, s, t, *pa, *pb,*pc,*pd; pa = &a ...

  9. Atcoder Grand Contest 016 F - Games on DAG(状压 dp)

    洛谷题面传送门 & Atcoder 题面传送门 如何看待 tzc 补他一个月前做的题目的题解 首先根据 SG 定理先手必输当且仅当 \(\text{SG}(1)=\text{SG}(2)\). ...

  10. Codeforces 1423N - BubbleSquare Tokens(归纳+构造)

    Codeforces 题目传送门 & 洛谷题目传送门 一道思维题. 题目没有说无解输出 \(-1\),这意味着对于任意 \(G\) 一定存在一个合法的排列方案.因此可以考虑采用归纳法.对于一个 ...