vs调试Qt工程、Qt的dll
一、前言
本人一直使用vs开发sdk,以往从未经历过夸开发环境交互方面项目,由于最近项目需要,本人提供sdk,提供给Qt开发人员使用。其中的艰辛只有新手经历过这番折腾才能理解,不过通过摸索确实也增长了自己的知识。
情景描述:
- 本人使用vs2015编写好vs的sdk,也就是dll,提供给Qt工程师
- 使用vs新建工程,配置dll,调试确认正常使用,于是交给Qt工程师
- Qt工程师各种吐槽有bug,具体的bug可以参考之前的文章:
https://blog.csdn.net/LittleLittleFish_xyg/article/details/83896675 - 实在没辙只能将vs的dll工程转移到Qt下开发(对Qt不熟悉,折腾不少时间)
- 完成Qt下的dll,使用Qt工程调试,发现很多vs的特性在Qt下使用不一样
- 几番折腾,完成Qt下的dll,与Qt工程师联调
- Qt 最软肋的地方是,调试器,真心各种吐槽,每次调试进入断点超级慢,实在无法忍受,每次修改一点东西,加断点调试,等四五分钟才能进入断点,心情都爆发了
- Qt调试器的恶心之处:路径越深,断点越多的情况下,调试器越难启动,甚至几乎崩溃掉,半天都不能执行到断点,卡死的状态,作为skd开发者,本人实在是受够了,改bug的成本、心情代价太高了
- 所以尝试在vs中调试qt工程、调试qt的dll
经过一番学习以及根据自身经验的积累,总算是成功把vs调试qt工程的方法摸索出来了,先贴一张效果图,后面在详细解说。
备注:后续演示的过程中,由于涉及到公司项目的特殊性,有些内容可能加马赛克(本人只想分享心得,不想惹法律责任!)
- 此工程为opengl渲染模型方面的项目,本人使用算法计算信息,交给UI设计工程师一起完成的项目
- 经过验证,vs的调试器比Qt的强不知多少千万倍,调试速度杠杠的,总算找回来当初的感觉,真心不喜欢Qt的调试器(不得不承认Qt的ui等其他功能还是很强的)
二、需要的环境
要想实现vs调试Qt工程,需要安装有这些环境:
- vs2013(可以是其他)
- Qt (本人是Qt5.4)
- Qt VS Tool
Qt VS Tool的安装也比较简单,在vs中可以直接安装:
在右上角搜索Qt,找到该工具,安装,关闭vs,重启即可使用
三、配置过程
详细的配置过程相当复杂,当然也可能是我的工程本身比较复杂的缘故。
-
打开两个工程,一个dll,一个exe
-
编译dll工程
-
配置好路径再编译,看到是函数入口问题
-
加载项目默认为exe,而dll工程需要修改这个位置,编译,通过
-
编译qt的exe工程,报错版本方面错误,打开Qt Project Setting,修改版本为vs的编译器
-
编译,报错平台工具集报错,修改平台为2013
-
报错找不到头文件
-
打开Qt Project Setting,“属性”选择2013编译器,“模块”选择需要的模块,需要什么模块,可以在.pro文件中看到
-
编译如下,缺少xxx.h(这个是dll里面的,需要包含头文件路径),ui_xxx.h这个是ui界面的头文件,是Qt的moc生成的
-
配置两个路径,第一个是dll工程头文件路径inc,第二个是ui_xxx.h 的路径此处是GeneratedFiles目录,这是vs通过.pro文件打开时候新建的路径
-
编译如下,缺少qt的相关lib,此时可以打开连接器,是默认配置一堆qt的lib,只需要添加qt的lib的路径即可
-
编译,出错,这是dll的lib没有找到,配置一下路径,并连接lib文件,既可以通过
-
编译,出现如下错误,是函数入口问题,在链接器中设置入口点函数
-
编译,通过!但是,不能调试,报错如下,是缺少pdb文件
-
dll和exe工程都需要生成pdb文件,
-
运行,程序跑起来,还能调试,比Qt的调试器快不知多少倍,一个字“爽”
四、总结
在具体做工程的过程中,遇到新的知识,不肯低头认熊,抽时间去摸索就有机会找到解决方法,当然是以时间代价为成本的,刚开始本人也是由于项目紧张的缘故并没有摸索出来,如果刚开始就知道这样调试,就不用重新学Qt,在Qt下开发sdk,并调试工程,但是正是因为学了Qt下的开发,才让我相信vs能做到与Qt的联调,所以有些过程并非是无益的,同时也承认这个过程花了很多的时间磨合,但是这有助于知识的迁移。
- 知识迁移过程:1、从vs下dll,提供vs工程使用;2、从vs下的dll,提供Qt使用;3、从Qt下学习dll以及qt工程调试;4、从vs调试qt的dll,和qt的exe。这是一个知识迁移的过程,不断的否定到肯定的过程。
- 举一反三过程:从vs开发的经验,知道如何配置库,在摸索Qt的过程,也需要配置库,所需文件、路径等信息都如出一辙;从vs开发经验中,vs工程调试vs的dll的过程,和Qt工程调试Qt的dll过程,类似,区别也就是路径的不一样;从Qt调试vs的dll,到vs调试Qt的dll,都是一样的概念,只是在配置的过程会遇到很多问题,当你有足够的经验的情况下,见招拆招,却啥补啥,知道出现编译通过为止。
- 开发经验的迁移:当积累到一定程度(本人还很渣,高人请不要见怪)的时候,你能预测到这个问题可能会产生什么效果,出现一个bug,能够知道是什么引起的,并相应作出尝试,并能够成功验证假设,就比如今天vs调试qt工程,就是一个尝试,花了几个小时,总算把这条路走通。以后就直接在vs做qt开发即可,毕竟vs的各种快捷键,操作习惯都熟练,开发效率也将提高。
以上便是vs工程师与Qt工程师团队协作的一个过程,收获很多,感谢!