文章目录

  • 概述
  • 编译问题
    • macro name is a reserved identifier
  • 运行问题
    • 单步调试-结构体局部变量
    • Qt 定位内存起始地址失败
    • 查看U8*的变量
  • 编辑问题
    • 无法使用高级搜索
    • 代码文件无法输入中文
  • GDB调试
  • 调试乱码问题
  • 控制台的使用
  • 断言使用

概述

Here,续接 C++/Qt 开发环境提升(1),它主要讲解了Qt 4.8.6的源码编译方法(源码编译,是进行Qt程序深入调试的基础),编译注意事项,Qt帮助系统,Qt学习方式等。本博文将记录在使用Qt集成开发环境过程中遇到的实际问题…

编译问题

macro name is a reserved identifier


在学习QtCreator架构时,打开了 帮助 - 关于插件 - C++ - ClangCodeModel插件,结果就有上述提示。未继续深究Clang!

运行问题

单步调试-结构体局部变量

刚刚发现了一个奇怪的问题,在使用QtCreator进行F10单步调试时,函数内部的结构体变量,即使是加上断点也走不到,且运行到该行时,断点符号会消失。初步感觉上,是程序没有编译好,但是重新完全编译后,依然存在该问题,勾起了我的好奇心。于是乎单独的写了一个测例,测试结果说明了,局部的结构体变量,如果这个结构体没有构造函数(无关乎结构体组成元素的类型),则在进行QtCreator下的gdb调试时,定义局部结构体变量的这一行,不会走到。然后,我打开了好久不用的VS,发现其测试结果与上述一致,在一行结构体(无构造函数)局部变量定义代码前边加上断点标记符号,但是在进行调试运行时该标记会自动消失,即不能断在该行,单步调试也不走它。

另外,发现这个局部的结构体变量,在进行memset前极有可能出现不是全零的情况,因此对于结构体变量的memset初始化过程,并不是可有可无的。

Qt 定位内存起始地址失败

    int  hex1 = 0x1234;uint hex2 = 0x1234;     //无法直接调试内存quint32 hex3 = 0x1234;  //无法直接调试内存unsigned int hex4 =0x1234;

在QtCreator调试环境-本地变量与表达式(Locals and Expressions)窗口,右键,查看变量对应的内存,如下图,Open Memory View at Object’s Address / Memory Editor at Object’s Address,处于灰色禁用状态。(Here该是QtCreator4.4.1的一个缺陷)

hex1可以跳转到变量地址 hex2不可以跳转到变量地址(灰色)

进一步测试这个缺陷发现,对于使用int、unsigned int直接定义的变量,使用[打开内存编辑器]功能时,可以直接准确跳转到变量起始地址(Open Memory View at Object’s Address),但是当你使用uint、quint32等数据类型(ttypedef unsigned int uint/quint32 )定义变量时,就出现了上图右侧的显示风格(灰色,无法信息接收)。

查看U8*的变量

试图在变量监视窗口看一个U8指针的值,结果显示为0,不要惊慌,你只是没有选对数据展示格式。

修改方案如下,选中上述第一幅图中粉色标记位置,右键–

编辑问题

无法使用高级搜索

这里指的是在QtCreator中无法使用 Ctrl+Shift+F 组合按键,打开IDE的高级搜索功能。在办公机器(Win7系统)存在这样的问题,知道其与搜狗输入法有关,因为只要在使用上述组合键时,先按Ctrl+Shift+空格将输入法隐藏,则可以正常打开QtCreator高级搜索。但是这招在Win10机器上却不管用。后来多方查证,关闭了搜狗输入法-属性设置-高级-系统功能快捷键-取消简繁切换的勾选,问题解决。

代码文件无法输入中文

[QtCreator无法输入中文],在使用QtCreator编辑器时,偶尔遇到过在.h或.cpp文件编辑时无法输入中文的情况:输入法显示搜狗中文,但是当你敲击键盘时,没有弹出来中文候选字,而是直接将英文字母输入进去了。后来,总结了这种现象的原因。

Qt文件编辑器的默认设置 文件实际编码与本地默认编码不一致时

“无法输入中文的状况就出现在上述情景下”,当我们选择了按照实际代码文件编码格式重新载入显示时,(如上述情况,本地默认是ANSI,但是代码文件是UTF的,选择按UTF8重新载入),此时再对代码文件进行编辑,则问题出现。解决办法是,使用NotePad等工具,转换代码文件为QtCreator本地默认编码格式,然后重新打开再进行编辑就好了!

GDB调试

参见

调试乱码问题

Qt5 中文乱码解决方法剖析 # https://blog.csdn.net/li_jian_xing/article/details/47609621

控制台的使用

一直有个疑问:不管是系统控制台,还是QtCreator控制台,多线程访问控制器输出时,它们能否保证显示顺序就是真实的运行顺序 ?

在进入这个问题前我们先来看看控制台基础概念。在MSDN上有一部分关于Console的资料,可以找找你想要的答案!控制台有一个输入缓冲、至少一个屏幕缓冲(输出缓冲)构成。多个进程可共享一个控制台。其实到现在,骨子里我是相信在多线程下Console显示能保证与实际系统运行顺序一致的,但是打印看上去有点怪?而这种所谓的怪现象,可能并不怪,这可能是CPU执行策略导致的,那么我们应该去研究CPU时间片、轮循、CPU等待、并行执行等概念!

关于多线程的执行,我有一堆问题没有搞明白,这个以后单独开一篇boke。先看看这个问题: 在多核CPU下,同一进程下的多个线程可不可以并行运行 ? 也许对想搞明白什么有所帮助。另外,用户应用程序中,能否通过底层接口感知到自己的执行cpu、直接的执行时间、等待时间等?

断言使用

define Q_ASSERT_X(cond, where, what) ((!(cond)) ? qt_assert_x(where, what,__FILE__,__LINE__) : qt_noop())int qAllocMore(int alloc, int extra)
{Q_ASSERT(alloc >= 0 && extra >= 0);Q_ASSERT_X(alloc < (1 << 30) - extra, "qAllocMore", "Requested size is too large!");//控制台打印信息//ASSERT failure in qAllocMore: "Requested size is too large!", file tools\qbytearray.cpp, line 73}//请继续学习qt_assert_x的实现过程

“__FILE__”:在源文件中插入当前源文件路径及文件名; __LINE__:在源代码中插入当前源代码行号;

代码工程/Qt 开发环境提升(2)相关推荐

  1. qt工程在linux系统里颜色显示错误_【飞凌嵌入式RK3399开发板试用体验】+QT开发环境搭建测试(二)...

    作者:飞扬的青春 在拿到开发板之后,已经体验了Android操作系统,接下来就是体验Linux下的开发,本次以QT的一个小案例来测试下. 首先是自己先搭建了一个Ubuntu18.04的虚拟机,使用真机 ...

  2. 【QT基础入门】1、QT开发环境搭建

    文章目录 一.学习所需要的软件 二.安装 VS2012 三.win10 下安装 QT 一.学习所需要的软件 Visual Studio 2012 Qt SDK 4.7.4 Qt Creator 2.4 ...

  3. 08_树莓派安装Qt开发环境

    目的: 通过本章节,在树莓派上安装Qt开发环境. 目录 1.Qt简介 2.安装Qt开发环境 2.1.安装指令 2.2.示例demo 2.2.1.打开Qt Creator工具 2.2.2.新建工程 2. ...

  4. VS+QT开发环境搭建

    VS+QT开发环境搭建 1.工具准备 VisualStudio最新版直接官网下载,根据需要进行下载,我下载的免费社区版本.日常开发完全够用. QT建议不要下最新版本,同样,为了减少病毒的风险,直接官网 ...

  5. Ubuntu下嵌入式Qt开发环境配置全攻略

    本文以友善之臂的Mini6410嵌入式开发板为目标板,介绍ubuntu 12.04系统下,配置嵌入式Qt开发工具的过程.本文中介绍的工具.大部分步骤和脚本来自开发板附带资料光盘,但其默认配置环境为老旧 ...

  6. Ubuntu 安装 Qt 开发环境 简单实现

    2019独角兽企业重金招聘Python工程师标准>>> Ubuntu 安装 Qt 开发环境 简单实现是本文要介绍的内容,内容很短,取其精华,详细介绍Qt 类库的说明,先来看内容. 一 ...

  7. 【Tools】Visual Studio 2019搭建Qt开发环境

    00. 目录 文章目录 00. 目录 01. 概述 02. Visual Studio 2019安装 03. Qt6安装 04. qt-vsaddin插件下载 05. qt-vsaddin插件安装 0 ...

  8. Ubuntu 安装 Qt 开发环境(转)

    Ubuntu 安装 Qt 开发环境 简单实现是本文要介绍的内容,内容很短,取其精华,详细介绍Qt 类库的说明,先来看内容. (转http://mobile.51cto.com/symbian-2718 ...

  9. QT GUI开发(一):保姆级VS2015配置QT开发环境

    QT GUI开发(一):保姆级VS2015配置QT开发环境 前言 一. QT环境搭建 1.1 QT安装 1.2 VS中安装工具库 二. QT简单工程示例 三. 小结 前言 做软件开发,特别是用户图形界 ...

最新文章

  1. python爬虫,生成文件速度追不上已经爬取文件的生成速度。
  2. OpenCV的cv::cvtColor函数之“CV_RGB2GRAY”: 未声明的标识符错误解决方法
  3. c语言作业做出金山打字功能,goldmountain.c
  4. c++实现,对象池 object_pool
  5. P2403 [SDOI2010]所驼门王的宝藏(强连通分量)(拓扑排序)
  6. ubuntu下安装配置nfs
  7. 在linux上获得线程id的方法
  8. 修改已经创建的docker容器的端口映射
  9. android 自定义进度条 水量,Android自定义带水滴的进度条样式(带渐变色效果)...
  10. 用MVC做可拖拽的留言板,利用 Jquery模板 -- JsRender
  11. 在eclipse中安装WindowsBuilder插件
  12. Samsung Pay和Finablr宣布跨境支付合作
  13. AtCoder Beginner Contest 233(A~D)题解
  14. Java深入(面试常见题)
  15. 2020大学研究生计算机排名,美国大学研究生计算机专业排名2020情况如何?
  16. jpg转bmp c语言 linux,C语言实现BMP转换JPG的方法
  17. 用HTML+CSS做一个漂亮简单的个人网页(第二篇)
  18. python设置颜色_使用python改变颜色的色调
  19. 【新2023Q2模拟题JAVA】华为OD机试 - 预订酒店
  20. 国家VR/AR扶持政策文件一览(多文件下载)

热门文章

  1. ArcGIS栅格转矢量
  2. PPT如何更换全部背景?
  3. 局域网中两台笔记本之间传输文件
  4. Linux Oracle 创建用户
  5. 2018年第三个工作日,我们如何利用碎片化学习?
  6. 混合开发监听安卓手机物理返回键
  7. 美颜sdk相机的发展对社会审美是一件好事吗?
  8. 【博应用下载】如何使用b612咔叽APP美化相册图片?
  9. layer.tips使用
  10. 如何做好自动化机械设计,一起学起来