如何在 Windows 下调试 Qt (MSVC) 应用程序

在Windows环境下,使用Qt Creator开发Qt过程中一定会遇到调试问题。
如何在Qt Creator里面单步调试呢?

一般来说,我们开发Qt应用程序,都会使用QtCreator, QtCreator默认为Qt和C++的开发提供了很多帮助,尤其是集成的帮助、提示,和代码跳转。
但是,当进行代码调试的时候,就不如Visual Studio方便了。
(我会告诉你们,当博主精神状态不好的时候,写代码,单元测试都要依靠调试器吗?)

好在这不是大难题,这里罗列了三种方法。

1 QtCreator + Debugging tools for Windows

在Qt Creator当中,编译使用MSVC,但是调试是使用cdb.exe。
获取和安装: cdb.exe 在 Debugging tools for Windows 中,而现在已经不单独提供下载,只在Windows SDK 或者Windows Driver Kit里面包含 所以需要下载微软的调试工具,最少需要下载 Windows SDK。

Windows 7版本下载地址: http://www.microsoft.com/en-us/download/details.aspx?id=8279

下载后不用全部安装,只需要找到Debugging tools for Windows (不到50MB),单独安装就可以了。这是因为我们的Visual Studio安装时带了编译环境。

配置: 安装完毕后,重启QtCreator,

  1. 在“工具 –> 选项 –> 构建和运行 –> 工具链”( “Tools –> Options –> Build & Run –> Kits”)中,依次选择每个MSVC桌面版的配置,在下方Debugger当中增加刚才安装的 Debugging tools for Windows目录下面的cdb.exe。

如何在 Windows 下调试 Qt (MSVC) 应用程序_第1张图片
2.调试符号:调试符号(用来解析运行时环境和系统dll的内存映射)是需要从微软的调试符号服务器上面去下载的。 第一次启动CDB,QtCreator会要求配置下载路径,默认是在临时文件夹里。
在“工具 –> 选项 –> 调试器 –> CDB”中。可以配置符号路径。例如“symsrv*symsrv.dll*D:\mysymbols*http://msdl.microsoft.com/download/symbols”

如何在 Windows 下调试 Qt (MSVC) 应用程序_第2张图片

优点:不用切换IDE,如果你编码能力OK,那么配合第三种方法完全可以满足日常开发。
缺点:架设一套开发环境实在太麻烦了。

2 Visual Studio + Qt VS Add-on

早期我采用的方法是:在 QtCreator 里面开发,遇到需要靠调试解决的难题,把项目导入VS进行调试。

在Visual Studio中点击“Qt -> Open Qt Project File(.pro)”就可以导入了。

优点:无需额外安装;鼠标提示变量数值,深入看各种变量。
缺点:要切换IDE,每次修改了pro文件就得重新生成一次vcproj文件;VS调试器对Qt内部实现支持不稳定。这主要是因为Qt里很多对象的实现太复杂了。所以有时候内部Private对象(命名为d的那个)无法展开,看不到属性值。

3 运用QDebug类

QDebug是Qt的调试信息输出工具类。实质就是一个信息输出流。

使用时只需包含头文件 #include

#include 

//有如下两种调用方式
//printf形式
void qDebug(const char *, ...);
//输出流形式,static方法,无需new
QDebug qDebug();

具体用法就不多做介绍了,除了普通输出流的模式以外,还有 __FILE__, __FUNCTION__, __LINE__ 几个预定义宏,可以用来输出位置信息。

优点:无需外部工具;灵活度最高,想输出啥输出啥;Release编译依然有效,由于程序的表现在Debug和Release的时候不尽相同(例如申请的内存区域初始值,new 的QPixmap是不对内存做初始化的……),因而可以用于调试很多Release阶段才发生的问题。
缺点:这个不应该算作用Debugger调试,需要写大量的输出代码,其次,它严重影响了代码的整洁性和可读性。虽然,如果定义了宏 QT_NO_DEBUG_OUTPUT ,qDebug将什么都不做,输出很干净,但是代码上增加大量的调试代码确实会影响整洁。

本文转自 https://my.oschina.net/u/514122/blog/754114

你可能感兴趣的:(qt,windows,c++,visual,studio)