由Qmake.exe/QtCreator.exe启动速度慢挖进去(非常有趣的调试过程,作者态度不错,而且关闭Welcome插件也是常见办法)
一直用Qt Creator开发Qt程序,Nokia的Qt Creator实在太慢了,启动慢,编译速度也是超级慢。昨天,终于它慢的让我无法忍受了,我决定抛开手上的一切工作,深入挖掘Qt Creator启动慢的原因。首先,怀疑是给力的Mcafee企业版卡住程序了。试试把Mcafee的一切监控都关闭,没效果!然后怀疑系统进程太多了,卸载掉SONY送的一堆无用程序,没效果!继续怀疑某些进程与Qt Creator有冲突(Windows7 x64嘛),kill掉所有无关进程,没效果!重置Windows的系统服务,没效果!我擦,人品差,Qt Creator与Win7 x64不兼容,我的出了这么个结论。连更改程序兼容性设置都不行?!
正当拿它没辙时,同学说它电脑上的Qt Creator跑的很欢很开心,也是Win7 x64。太打击了,都是Win7 x64,为何我这跑龟速?算了,身为软件开发人员,还是专业点吧,祭出Process Monitor,我偷窥它!呃……x64系统下跑32位程序,一大坨的Wow的dll调用要看吐。
但是,记录中一连片的Process Profiling操作耗时很久,1个耗时1秒钟左右。那Process Profiling是啥呢?后来,查了许多资料,发现它只是当程序空闲时Windows方便统计CPU使用率等性能信息插入的探测操作。也就是说,这么大会儿,Qt Creator啥都没干?!上面有个Qmake.exe的调用操作,难道启动慢跟它有关?找到了Qmake.exe,拿鼠标敲它两下,果然一个黑框卡住不动。搞半天,发现Qt Creator启动慢确实与Qmake启动慢有关,但也不全怨Qmake,Creator自己也有问题!
哎,瞅着一大片的Process Profiling没辙,谁让我软件调试没学好呢。WinDbg不会用呀,就是会用还得弄pdb,弄pdb还得重新编译Qmake和Qt Creator……无意间,禁用网卡试试,一下把所有网卡全部禁用。Qmake和Qt Creator居然奇迹般的启动飞快!这样行?!那我拿墙堵这俩进程不就好了!打开落灰的Windows自带防火墙,在高级规则里禁止Qmake和Qt Creator如站/出站。居然不行!也许这俩程序启动时在等个什么结果……能等啥呢?解决网络问题,当然还是要抓包,祭出Wireshark来抓包,居然是这样:
NBNS是NetBIOS Name Service的缩写,貌似Qt Creator在启动时查询CMAKE/CMAKE.EXE/SH.EXE这样的主机名?!这行为太匪夷所思了,还是得找源码看看:
#ifdef Q_OS_WIN
static QStringList detectShellPath()
{
QStringList paths;
QString path = qgetenv("PATH");
QStringList pathlist = path.toLower().split(";");
for (int i = 0; i < pathlist.count(); i++) {
QString maybeSh = pathlist.at(i) + "/sh.exe";
if (QFile::exists(maybeSh)) {
paths.append(maybeSh);
}
}
return paths;
}
#endif
这是Qmake的一段代码,它在启动时获取名为“PATH”的环境变量,然后用“;”拆开成为一个QStringList,最后把PATH环境变量中的每个路径都连接“/sh.exe”成为新路径,用QFile查找该路径是否存在。这样的的话,怎会产生查询SH.EXE主机名的操作呢?回过头来,在Qmake启动的Process Monitor监控记录中找到如下的操作:
居然用CreateFile打开\\sh.exe\,查一下MSDN,CreateFile是这么理解这种写法的:\\servername\pipe\pipename。CreateFile居然真的把sh.exe当作服务器名,来创建一个管道-_-!那这个“\\sh.exe\”是哪来的呢?由上面的代码,它是从环境变量拼出来的。我看一眼我的PATH环境变量,一下震惊了!!!里面一段是这样写的“;C:\Program Files\WIDCOMM\Bluetooth Software\syswow64;\;”。这个该死的反斜杠是啥时候弄出来的!去掉反斜杠,再次启动Qmake和Qt Creator,它俩终于像在我同学电脑上那样跑的很欢很开心了!
总结:看似系统问题,实则程序问题;看似程序问题,实则网络问题;看似网络问题,实则环境变量问题!如果Windows防火墙真的能把创建远程管道操作堵住的话,也许我永远找不到问题的真相。问题的根源和表象差的好远呀!
http://www.cnblogs.com/codingmylife/archive/2011/03/03/1970357.html
楼主你太牛了!!我也遇到了同样的问题,发现最新版Qt Creator 2.4.0在启动时会访问2个地址lillemy.nokia.kunder.linpro.no:http和hx-in-f118.1e100.net:http;导致这个IDE启动时奇慢无比,NND不知道nokia要干嘛;
经过一番折腾,发现是QtCreator的一个插件造成的:打开QtCreator.exe->帮助->关于插件->展开Qt Creator,找到Welcome插件,设置为不选中;重新启动,OK!
由Qmake.exe/QtCreator.exe启动速度慢挖进去(非常有趣的调试过程,作者态度不错,而且关闭Welcome插件也是常见办法)的更多相关文章
- 使用instsrv.exe+srvany.exe将应用程序安装为windows服务[转]
转自:http://qingmu.blog.51cto.com/4571483/1248649 一.什么是instsrv.exe和srvany.exe instsrv.exe.exe和srvany ...
- 运行tomcat7w.exe tomcat7.exe ,提示 指定的服务未安装 unable to open the service 'tomcat7'
运行tomcat7w.exe tomcat7.exe ,提示 指定的服务未安装 unable to open the service 'tomcat7'(用的是绿色的Tomcat7) 解决方法: 打开 ...
- 宿主进程 [*.vshost.exe] & [*.vshost.exe.config]
宿主进程 [*.vshost.exe] & [*.vshost.exe.config] pdb文件: 英文全称:Program Database File 中文全称:程序数据库 文件 Debu ...
- instsrv.exe srvany.exe启动服务
1.通过注册表注册服务 private static readonly string regpath = @"SYSTEM\CurrentControlSet\Services\Consul ...
- 关于wcf三大工具的使用(wsdl.exe svcutil.exe disco.exe)
首先,我们必须创建一个wcf服务.并部署到IIS中.这里我已经将一个StudentService服务部署到我自己的电脑了. (1)svcutil.exe svcutil.exe工具的作用是通过服务地址 ...
- C# 中的.pdb/ .vshost.exe/ .vshost.exe.manifest文件
转自 C# 中的.pdb/ .vshost.exe/ .vshost.exe.manifest文件讨论 pdb文件: 英文全称:Program Database File 中文全称:程序数据库 文件 ...
- vcredist_x64.exe vcredist_x86.exe 静默安装方法收集
vcredist_x64.exe /install /quiet /norestart 更多方法参考如下: http://www.cnblogs.com/lidabo/archive/2013/01/ ...
- php.exe php-cgi.exe php-win.exe的区别
php.exe(linux下是php/bin/php)是提供来在命令行(命令行解释器)执行PHP文件的工具,比如你在有文件abc.php,那么你可以在CMD命令提示符下执行命令php.exe abc. ...
- 用MT.exe将exe中的manifest文件提取出来和将manifest文件放入exe中
前一种方法是将manifest文件放入exe中,但是要记得需要在工程中设置 这样的话exe中就不存在manifest了,在debug目录下就会看到相应的manifest文件.后者是将exe中的man ...
随机推荐
- 【BZOJ 1024】 [SCOI2009]生日快乐
[题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1024 [题意] [题解] 要求恰好分成n个部分;每个部分的面积都一样; 则dfs的时候 ...
- 【BZOJ 1037】[ZJOI2008]生日聚会Party
[题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1037 [题意] [题解] /* 设f[i][j][k][l] 表示前i个人中,有j个男 ...
- 【13.77%】【codeforces 734C】Anton and Making Potions
time limit per test4 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- Web自动化工具对比
首先说一下我对Web自动化测试与CS自动化测试的认识.从宏观对比都是通过脚本自动化完成功能的验证,区别不大.Web测试更为显著的浏览器兼容性.安全,以及与Web技术相关的表单测试.链接测试等,其实都是 ...
- 打造开发React Native的Sublime
之前一年多一直用Sublime Text做前端开发,最近做React开发,发现不太好用,就尝试其他编辑器.WebStorm和VS Code都用过,WebStorm基本不用装插件,可以直接用,但用习惯 ...
- 【29.41%】【codeforces 724D】Dense Subsequence
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- numpy 辨异(四)—— np.repeat 与 np.tile
>> import numpy as np >> help(np.repeat) >> help(np.tile) 二者执行的是均是复制操作: np.repeat: ...
- zlib minizip 实现解压zip
#include <stdio.h> #include <string.h> #include "unzip.h" #define dir_delimter ...
- VSCode 小鸡汤 第01期 - REST Client 简单好用的接口测试辅助工具
介绍 今天给大家介绍一个后端开发辅助的好工具 -- REST Client,插件如其名这就是一个 REST 的客户端插件,把我们的 VSCode 转化为一个 REST 接口测试的利器 我们一般都会用 ...
- openresty: nginx worker不同请求之间共享数据
To globally share data among all the requests handled by the same nginx worker process, encapsulate ...