在Windows平台下Qt的exe报错问题排查步骤

工具介绍:

1. Dependency Worker

  Dependency Worker是一个免费的用具用来扫描任何的32bit 或者64bit 的Windows模块(可以是exe,dll, sys,etc.) ,并建立hierarchical tree 各种模块的依赖图。 对于每个发现的模块, 该软件列出了所有被这个模块使用的函数, 这些函数实际是被其他模块调用。另一种视图展示最小的依赖文件的集合。 并伴随着相似的信息。

  Dependency Worker 同样是非常有用的toubleshooting system errors (故障排除系统错误) ,这些错误与loading 和executing modules,即这些模块的加载和执行依赖。

  Dependency Worker 检测许多常见的应用问题,如丢失modules, 无效的modules, import/export mismatches, circular dependency errors, 模块类型的错误匹配, 以及模块初始化误差等等。

  Dependency Worker 可以执行在Wind95, 98, ME, NT,  2000,XP, 2003, Vista, 7, and 8; 能够处理检测在32bit 或者64bit的的windows module, 包括 为Window CE 设计的模块。

  Dependency Worker 可以以图形应用显示,或者是控制台应用。两种使用方式。 能够处理模块依赖的所有类型问题,报错implicit, explicit (dynamic/ runtime), forwarded, delay-loaded, and injected. 还可以提供详细的帮助信息。

  

2. Process Explorer v16.22

  Process Explorer  ,可以用来检擦哪一个程序打开了特定了文件或者目录。Process Explore 可以显示出处理的信息,以及打开或者加载的dll。

  process Explorer 的显示由两个子窗口组成。 上面窗口展示当前活动的进程列表, 包括账户名称, 则在下面的窗口中展示的信息依赖于当前的Process Explorer选中的条目。 当Process Explorer 是handle mode , 则将会处理选中的process。如果Process Explorer 是在Dll 模式,将会看到dll 的捏村匹配的文件。同样Process Explorer 江湖快速的展示特定的打开的句柄,或者加载的dll 。

  Process Explorer 最重要的能力是来最终Dll 的版本号问题,以及 handle leak句柄的泄露, 并提供给窥视Windows 和应用的工作。

3. windeployqt

  Qt 自带的发布以及依赖exe 的qt 库的工具。

  Qt 程序开发完成后, 需要在没有Qt 开发环境的系统上部署exe,对exe依赖的qt 各种模块自动添加到exe目录位置。进行快速部署。

(1)Windows部署工具功能

  Windows部署工具旨在自动执行创建可部署文件夹的过程,该文件夹包含从该文件夹运行应用程序所需的与Qt相关的依赖关系(库,QML导入,插件和翻译)。 它为Windows运行时创建沙箱或为Windows桌面应用程序创建安装树,可以轻松将其捆绑到安装包中。

  该工具可以在QTDIR / bin / windeployqt中找到。 它以.exe文件或包含.exe文件的目录作为参数,并扫描可执行文件的依赖关系。 如果使用–qmldir参数传递目录,则windeployqt将使用qmlimportscanner工具扫描目录中的QML文件以获取QML导入依赖关系。 然后将识别的依赖关系复制到可执行文件的目录中。 Qt5Core.dll中的硬编码本地路径进一步被相关的替换。
   如果应用程序可能需要额外的第三方库(例如数据库库),windeployqt不会考虑这些库。

  

使用方法 :

1. 使用windeployqt最简单的方法是添加Qt的bin目录

  安装(例如<QT_DIR \ bin>)到PATH变量,然后运行:

  windeployqt <path-to-app-binary>
如果ICU,ANGLE等不在bin目录中,则需要在PATH中变量。
 如果您的应用程序使用Qt Quick,请运行:
windeployqt --qmldir <path-to-app-qml-files> <path-to-app-binary>

2. 直接在控制台Win+R, cmd 控制台命令行:

执行以下: cd 导航到 <QTDIR>\bin\所在目录,这样,就可以直接在Window 控制台命令行直接使用 windepolyat 了。

  最简单的调用方法:

  windeployqt  exe所在目录

Usage: windeployqt [options] [files]

Options:
-?, -h, --help Displays this help.
-v, --version Displays version information.
--dir <directory> Use directory instead of binary directory.
--libdir <path> Copy libraries to path.
--plugindir <path> Copy plugins to path.
--debug Assume debug binaries.
--release Assume release binaries.
--pdb Deploy .pdb files (MSVC).
--force Force updating files.
--dry-run Simulation mode. Behave normally, but do not
copy/update any files.
--no-patchqt Do not patch the Qt5Core library.
--no-plugins Skip plugin deployment.
--no-libraries Skip library deployment.
--qmldir <directory> Scan for QML-imports starting from directory.
--no-quick-import Skip deployment of Qt Quick imports.
--no-translations Skip deployment of translations.
--no-system-d3d-compiler Skip deployment of the system D3D compiler.
--compiler-runtime Deploy compiler runtime (Desktop only).
--no-compiler-runtime Do not deploy compiler runtime (Desktop only).
--webkit2 Deployment of WebKit2 (web process).
--no-webkit2 Skip deployment of WebKit2.
--json Print to stdout in JSON format.
--angle Force deployment of ANGLE.
--no-angle Disable deployment of ANGLE.
--no-opengl-sw Do not deploy the software rasterizer library.
--list <option> Print only the names of the files copied.
Available options:
source: absolute path of the source files
target: absolute path of the target files
relative: paths of the target files, relative
to the target directory
mapping: outputs the source and the relative
target, suitable for use within an
Appx mapping file
--verbose <level> Verbose level. Arguments:
[files] Binaries or directory containing the binary.

  windeployqt -h 输出help文件信息,如下图:

  

  windeployqt.exe d:file\xxx\app.exe

  

  然后就可以对exe直接“打包”程序了:

  

  注意:

1. 如果对第三方的类库使用了,就要将相应的dll自己拷贝到相应的目录位置;

  如:

  glut32.dll, glew32.dll等类库

  

 2. 对于qt 的部分类库dll,往往也不能自动添加,则可以对<QTDIR>/bin 目录下的qtdll 根据项目的使用情况,自己添加相应的dll,

  如下图:

  则Qt5Opengld.dll, Qt5Xmld.dll 则需要自己添加到exe 目录中。

  

3. 或者根据在VS输出的exe加载的历史纪录中逐个比对,查看是否在exe 的目录中。

  来判断差异:

  

  

endl;

在Windows平台下Qt的exe报错问题排查步骤的更多相关文章

  1. Windows平台下Qt QOpenGL中glutSolidSphere()方法未定义的解决方法

    Windows平台下Qt中glut库的使用     用Qt中的QGLWidget窗体类中是不包括glut工具库的,难怪在myGLWidget(在我的程序中是QGLWidget的派生类)中绘制实心球体是 ...

  2. Windows平台下Qt开发环境的搭建

    Qt 是采用开源和商用双协议发布的开放源代码的图形开发类库,现在很多图形化的开源软件都使用了Qt. 下载地址:http://qt-project.org/downloads 1. 下载安装包 你可以从 ...

  3. Windows平台下Qt中glut库的使用

    用Qt中的QGLWidget窗体类中是不包括glut工具库的,难怪在myGLWidget(在我的程序中是QGLWidget的派生类)中绘制实心球体是说“glutSolidSphere”: 找不到标识符 ...

  4. windows平台下VLC2.0.5编译

    windows平台下VLC2.0.5编译说明 时隔一年多,又要搞流媒体了,不过这次是要做流媒体服务器. 暂时决定使用vlc+ffmpeg+live555,虽然听有些前辈说这个组合的性能较差,只能作为学 ...

  5. windows平台下nginx+PHP环境安装

    因为日常工作在windows下,为方便在window是下进行PHP开发,需要在windows平台下搭建PHP开发环境,web服务器选择nginx,不过windows版本的nginx性能要比Linux/ ...

  6. [转]Windows平台下Makefile学习笔记

    Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...

  7. Windows平台下Git服务器搭建

    第一步:下载Java,下载地址:http://www.java.com/zh_CN/ 第二步:安装Java.安装步骤不再详述. 第三步:配置Java环境变量. 右键”计算机” => ”属性” = ...

  8. windows平台下spark-shell配置

    一.下载安装spark,http://spark.apache.org/,选择合适版本后下载到本地,解压,bin目录下spark-shell文件就是spark命令行交互的入口. 二.下载安装windo ...

  9. <转>Windows平台下Makefile学习笔记(二)

    本文转自:http://blog.csdn.net/clever101/article/details/8286066 上次我们学习了怎么用Makefile编译一个控制台工程.这次我们学习一下如何使用 ...

随机推荐

  1. poj3250(单调栈模板题)

    题目链接:https://vjudge.net/problem/POJ-3250 题意:求序列中每个点右边第一个>=自身的点的下标. 思路:简单介绍单调栈,主要用来求向左/右第一个小于/大于自身 ...

  2. 第一次博客作业 <西北师范大学| 周安伟>

     1.助教博客链接:https://home.cnblogs.com/u/zaw-315/ 2.本周点评的作业数:3份,有留言互动. 3.本周点评有困难的地方: https://www.cnblogs ...

  3. JMeter之自动重定向和跟随重定向的区别

    自动重定向:只针对Get和Head请求,自动重定向转向到最终目标页面,但是Jmeter不记录重定向的中间页面过程,只记录最终页面返回结果.在结果树中,只能看到最终页面的服务器返回. 跟随重定向:是ht ...

  4. Spring MVC相关

    配置文件说明 web.xml, spring配置文件 applicationContext.xml, spring配置文件, mybatis连接mysql配置文件 sql-map-config-mys ...

  5. Linux下使用RedisPool时报错:redis.clients.jedis.HostAndPort getLocalHostQuietly 严重: cant resolve localhost address

    项目在本地无错误,当部署到linux服务器以后,启动tomcat报错: 意思是找不到服务的名称. 后在网上检索相关答案,是因为在/etc/hosts文件中没有加入当前服务器实例的名称,将当前服务器实例 ...

  6. mumu模拟机安装证书

    1. 先设置锁屏密码 2. 证书.crt才可以直接安装..der和.cer的都不可以.

  7. Centos7 出现Welcome to emergency mode!

    做mount挂载时,修改了  /etc/fstab 文件,导致Centos7重启时出现如下图所示错误: Welcome to emergency mode! After logging in, typ ...

  8. scrapy 爬取智联招聘

    准备工作 1. scrapy startproject Jobs 2. cd Jobs 3. scrapy genspider ZhaopinSpider www.zhaopin.com 4. scr ...

  9. php JS 导出表格特殊处理

    但是这样导出身份证号会变为科学计数: 解决方法就是: 我们了解一下excel从web页面上导出的原理.当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取 它,所以把mi ...

  10. Ansible安装及OS规划

    Ansible安装  1.以管理用户mtnsadmin连接服务器后下载安装包(-O表示将下载的文件存放到指定的文件夹下,同时重命名下载的文件)     sudo wget -O /etc/yum.re ...