QT断点调试[通俗易懂]

QT断点调试[通俗易懂]这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Ma…

大家好,又见面了,我是你们的朋友全栈君。


前言:


这个东西难道大家不都应该会吗???

本人用Qt Creator编写Qt的,~
当然是有大佬用记事本写Qt的hhhh,每个人用IDE或者编辑器的习惯不一样,但……调试嘛,大差不差的,将就看看吧


1、知道哪里可能出问题

在觉得可能会出现问题的代码块开头第一行代码左侧添加断点,(这里和下面都以用栈把中缀式变成后缀式的自写算法为例),如图所示:
后缀式计算结果函数的一部分
我们觉得bug很可能会出现在这个函数中(因为这个算法大部分代码都写在这个函数了,图片没必要把后续代码全部体现出来),所以我们在这个函数第一句左侧设置了breakpoint(断点),编译后用左下角的debug按钮我们就会进入debug模式,程序会执行到断点然后停住,出现一个小箭头告诉你执行到这一步了:
开始运行到断点
因为函数头只是一个声明,没什么实际的东西,因此我们看到debug后断点和箭头会直接跳转到了函数内的第一条语句,然后下面我门要知道两个按钮:
F10: 单步跳过,对于单个语句来说它会执行,然后跳转到下一条语句,但对于某条语句中包含函数调用的话,也会直接跳过调用函数的具体执行步骤,从而直接返回调用函数的结果:
在这里插入图片描述
如图,if执行,条件不满足,跳转到了else if语句


下面我们看看调用函数时,top_stack 与 xyge_ele都是我自己写的函数名:
在这里插入图片描述
按下F10
在这里插入图片描述
直接跳过函数执行步骤,跳到下一条语句去了。


F11: 单步进入:对于基本语句来说(用F11进入的函数除外),会进入这条语句的底层代码;对于调用的函数来说,会进入调用的函数去执行其每一条语句:
先看基本语句:
在这里插入图片描述
我们箭头指向运行到第220行代码,
按下F11
在这里插入图片描述
可以看到,进入了QString相关的底层代码(我也看不懂


再看调用函数时:
在这里插入图片描述
我们还是回到第253行的函数调用语句,
按下F11
在这里插入图片描述
可以看见进入了top_ele()函数,同理,接着按F11 还会进入xyge_ele()函数,在此就不赘述了。


然后在右侧有当前活动变量,在运行到箭头所指代码时的值,我们可以看变量的值是否和预期一直从而更快更方便地找到bug所在。
右侧活动变量的实时值:
在这里插入图片描述
当然也可以用qDebug输出,但我觉得没必要??


2、完全不清楚自己程序bug在哪

~~在 int main()左侧加断点就好了(手动狗头) ~~


3、跳过肯定不会出错的地方

debug时,会出现肯定不会出现错误的代码块块,为了节省时间,我们可以跳过:

只要在需要跳过的代码块前后各加一个断点
如下图,我们给QString[] 数组赋空字符串””,这个代码是不会有bug的,但却要执行很多次,就要按F10很多次,浪费时间,于是我们在代码块前后加了两个断点:
在这里插入图片描述
然后!!!,敲黑板,划重点了,我们需要按下 F5,就能跳过这段代码的啦!
在这里插入图片描述
emmmm,基本的断点调试就差不多时这样了,奥,一直用F11进入的话是可以进入最底层的汇编的,想深入学习研究汇编的同学可以试试 (没必要hhh)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143655.html原文链接:https://javaforall.net

(2)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 按位取反运算符_按位取反运算符的运算举例

    按位取反运算符_按位取反运算符的运算举例一、定义取反操作符是位运算符的中一个,作用是按位补运算符翻转操作数的每一位。二、举例说明正数:~(6)6的二进制表示00000110按位取反11111001说明:在计算机中,正数用

    2022年8月1日
    0
  • python语音信号处理(一)「建议收藏」

    python语音信号处理(一)「建议收藏」1.引言python已经支持WAV格式的书写,而实时的声音输入输出需要安装pyAudio。最后我们还将使用pyMedia进行Mp3的解码和播放。音频信号是模拟信号,我们需要将其保存为数字信号,才能对语音进行算法操作,WAV是Microsoft开发的一种声音文件格式,通常被用来保存未压缩的声音数据。语音信号有四个重要的参数:声道数、采样频率、量化位数(位深)和比特率声道数:可以是单声道、双声道…采样频率(Samplerate):每秒内对声音信号采样样本的总数目,44100Hz采样频率意味着

    2022年5月24日
    37
  • python怎么调用api接口_偶尔的注解

    python怎么调用api接口_偶尔的注解swagger3的使用Swagger2(基于openApi3)已经在17年停止维护了,取而代之的是sagger3(基于openApi3),而国内几乎没有sagger3使用的文档,百度搜出来的都是swagger2的使用,这篇文章将介绍如何在java中使用openApi3(swagger3)。相关介绍OpenAPIOpenApi是业界真正的api文档标准,其是由Swagg…

    2022年10月26日
    0
  • js获取cookie

    js获取cookie

    2021年8月22日
    65
  • PHPer面试指南-协议 篇

    PHPer面试指南-协议 篇

    2022年2月11日
    33
  • 【SpringBoot】43、SpringBoot中整合RabbitMQ实现延时队列(延时插件篇)「建议收藏」

    【SpringBoot】43、SpringBoot中整合RabbitMQ实现延时队列(延时插件篇)「建议收藏」一、介绍1、什么是延时队列?延时队列即就是放置在该队列里面的消息是不需要立即消费的,而是等待一段时间之后取出消费2、适用场景(1)商城订单超时未支付,取消订单(2)使用权限到期前十分钟提醒用户(3)收益项目,投入后一段时间后产生收益二、实现方式从以上场景中,我们可以看出,延时队列的主要功能就是在指定的时间之后做指定的事情,那么,我们思考有哪些工具我们可以使用?1、Redis监听过期Key可以参考我的博客【SpringBoot】三十五、SpringBoot整合Redis监听Ke

    2022年9月28日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号