如何在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。

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

图:在QtCreator中设置符号链接

优点:不用切换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 <QDebug>

//有如下两种调用方式
//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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值