1. 前言
在实际项目中,我们会遇到这种需求,即在Release构建配置下,调试Qt程序。
刚听到这个需求时,可能会有些奇怪。调试一般都是在Debug构建模式下进行的,Release用于发布程序,Release模式程序下应该是无法调试的。为什么不在Debug下调试呢?
复杂的项目中,通常存在各种各样的第三方库。由于各种因素,某些第三方库只有Release版本,没有Debug版本,同时由于各种原因,如在头文件中使用了STL,导致程序在Debug模式下使用Release版本的库会崩溃,从而导致主程序以及其他程序模块也只能在Release下构建和运行。默认情况下,Release模式下是无法调试的。无法调试程序,会严重阻碍开发进度。
实现在Release下调试Qt程序,需要对构造系统进行配置。
2. 配置项目
结合我们前面讲的《掌握VS项目配置》、《掌握Qt构造系统》、《掌握Qt调试技巧》等相关内容,我们其实可以通过修改项目配置解决以上问题。
2.1 开启调试信息输出
首先,在Qt Creator中将构建配置切换至 Profile 模式,如图:
对于 Profile 构建配置,有:
Profile = Release with debug info
Profile 配置即带调试信息(带*.pdb)的Release配置,为了在Release模式下进行调试,可以在开发阶段,使用此配置代替Release配置。
2.2 禁用优化
和 Release 构建配置一样,在 Profile 构建配置下,编译器也会对代码进行优化,导致生成的程序和我们的代码无法一一对应,从而导致无法调试。所以我们需要禁用 Profile 模式下的程序优化。
在Qt项目的 .pro 文件中,添加以下 qmake 指令:
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += -Od
即可禁用 Profile 构建配置下的程序优化。
2.3 重新构建
修改 .pro 文件后,执行qmake,使Qt构造系统重新生成Makefile文件,从而使 qmake 指令生效。最后,重新构建项目即可。
至此,已完成所有步骤,程序便可以在 Release 模式下进行源码调试。
2.4 开始调试
需要提及的是,在实际开发中,使用Qt调试程序经常会出现卡死、调试源码位置错误等问题。这是Qt使用的调试器本身存在的问题。如果出现这种问题,建议使用Visual Studio进行辅助调试,此部分的详细内容,可以参考本公众号的《掌握Qt调试技术》文章。
3. 结语
在实际项目开发中,可能会出现各种问题。仅仅学会Qt编码是不够的,深入Qt开发必须掌握构造系统配置的基本功。
本文原创发布于 Qt未来工程师。