vs调试Qt工程、Qt的dll

一、前言

本人一直使用vs开发sdk,以往从未经历过夸开发环境交互方面项目,由于最近项目需要,本人提供sdk,提供给Qt开发人员使用。其中的艰辛只有新手经历过这番折腾才能理解,不过通过摸索确实也增长了自己的知识。
情景描述:

  1. 本人使用vs2015编写好vs的sdk,也就是dll,提供给Qt工程师
  2. 使用vs新建工程,配置dll,调试确认正常使用,于是交给Qt工程师
  3. Qt工程师各种吐槽有bug,具体的bug可以参考之前的文章:
    https://blog.csdn.net/LittleLittleFish_xyg/article/details/83896675
  4. 实在没辙只能将vs的dll工程转移到Qt下开发(对Qt不熟悉,折腾不少时间)
  5. 完成Qt下的dll,使用Qt工程调试,发现很多vs的特性在Qt下使用不一样
  6. 几番折腾,完成Qt下的dll,与Qt工程师联调
  7. Qt 最软肋的地方是,调试器,真心各种吐槽,每次调试进入断点超级慢,实在无法忍受,每次修改一点东西,加断点调试,等四五分钟才能进入断点,心情都爆发了
  8. Qt调试器的恶心之处:路径越深,断点越多的情况下,调试器越难启动,甚至几乎崩溃掉,半天都不能执行到断点,卡死的状态,作为skd开发者,本人实在是受够了,改bug的成本、心情代价太高了
  9. 所以尝试在vs中调试qt工程、调试qt的dll
    经过一番学习以及根据自身经验的积累,总算是成功把vs调试qt工程的方法摸索出来了,先贴一张效果图,后面在详细解说。

备注:后续演示的过程中,由于涉及到公司项目的特殊性,有些内容可能加马赛克(本人只想分享心得,不想惹法律责任!)

  • 此工程为opengl渲染模型方面的项目,本人使用算法计算信息,交给UI设计工程师一起完成的项目
  • 经过验证,vs的调试器比Qt的强不知多少千万倍,调试速度杠杠的,总算找回来当初的感觉,真心不喜欢Qt的调试器(不得不承认Qt的ui等其他功能还是很强的)

二、需要的环境

要想实现vs调试Qt工程,需要安装有这些环境:

  1. vs2013(可以是其他)
  2. Qt (本人是Qt5.4)
  3. Qt VS Tool
    Qt VS Tool的安装也比较简单,在vs中可以直接安装:

在右上角搜索Qt,找到该工具,安装,关闭vs,重启即可使用
在这里插入图片描述

三、配置过程

详细的配置过程相当复杂,当然也可能是我的工程本身比较复杂的缘故。

  1. 打开两个工程,一个dll,一个exe
    在这里插入图片描述
    在这里插入图片描述

  2. 编译dll工程
    在这里插入图片描述

  3. 配置好路径再编译,看到是函数入口问题
    在这里插入图片描述

  4. 加载项目默认为exe,而dll工程需要修改这个位置,编译,通过
    在这里插入图片描述

  5. 编译qt的exe工程,报错版本方面错误,打开Qt Project Setting,修改版本为vs的编译器
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  6. 编译,报错平台工具集报错,修改平台为2013
    在这里插入图片描述
    在这里插入图片描述

  7. 报错找不到头文件
    在这里插入图片描述

  8. 打开Qt Project Setting,“属性”选择2013编译器,“模块”选择需要的模块,需要什么模块,可以在.pro文件中看到
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  9. 编译如下,缺少xxx.h(这个是dll里面的,需要包含头文件路径),ui_xxx.h这个是ui界面的头文件,是Qt的moc生成的
    在这里插入图片描述

  10. 配置两个路径,第一个是dll工程头文件路径inc,第二个是ui_xxx.h 的路径此处是GeneratedFiles目录,这是vs通过.pro文件打开时候新建的路径
    在这里插入图片描述

  11. 编译如下,缺少qt的相关lib,此时可以打开连接器,是默认配置一堆qt的lib,只需要添加qt的lib的路径即可
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  12. 编译,出错,这是dll的lib没有找到,配置一下路径,并连接lib文件,既可以通过在这里插入图片描述

  13. 编译,出现如下错误,是函数入口问题,在链接器中设置入口点函数
    在这里插入图片描述
    在这里插入图片描述

  14. 编译,通过!但是,不能调试,报错如下,是缺少pdb文件
    在这里插入图片描述
    在这里插入图片描述

  15. dll和exe工程都需要生成pdb文件,
    在这里插入图片描述

  16. 运行,程序跑起来,还能调试,比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工程师团队协作的一个过程,收获很多,感谢!

发布了83 篇原创文章 · 获赞 24 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/LittleLittleFish_xyg/article/details/84439967
今日推荐