在刚接触Qt时,对于较大的项目,用qtcreator + vs + cdb 调试时,启动很慢并且单步运行时也经常会出现卡住半分钟以上的情况,一直没有解决。在需要debug的时候大多会在vs2008上安装VS-addin插件,打开qt项目调试来避免qt调试太卡的原因。大约这样持续半年时间。直到后来重装了一次qtcreator和qt sdk,不知所以然的不卡了。也没用深究。

直到两年后的今天,又一次重装了qtcreator和qt sdk,发现问题有复现了,一直感觉很纠结,在网上也没有找到什么有效的解决办法,找到的只是大多数人在抱怨qtcreator 不好用的言论。平心而论,用了两年qtcreator 和vs2008,用了一段时间vs2010,一直没有发现qtcreator有什么不好的地方,对于文档那么齐全,如此详细的IDE,我只有用很棒的形容。

言归正传,下面写下我的探索过程,希望对一直抱怨qtcreator 调试太慢太费劲的人有那么一点点帮助,如果有什么不对的地方,欢迎大家拍砖。

在刚开始卡的时候,我一度怀疑是qt sdk的库版本问题,因为我从qt4.8.1升级到qt4.8.4,但是没有替换发布目录的qtCored4.dll ,qtGuid4.dll以及一些插件动态库和pdb调试符文件,但是在我替换了以后,仍然没有解决此问题,哈哈,too young too simple...

接下来,我认为在windows下VS编译不会出现卡的问题,既然我使用的vs编译器,为什么不能直接用VS的调试器呢?看了一下VS的调试日志发现:

VC6
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug]
"Auto"="0"
"Debugger"="C:\\Program Files\\Microsoft Visual Studio\\Common\\MSDev98\\Bin\\msdev.exe\" -p %ld -e %ld
"UserDebuggerHotKey"=dword:00000000
VS2008
1.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug]
"Auto"="0"
"Debugger"="C:\WINDOWS\system32\vsjitdebugger.exe" -p %ld -e %ld
2.
工具->选项->调试->实时,里边三个复选框,根据需要打钩就行了。

VS的默认编译器是vsjitdebugger.exe,既不是qtcreator所支持的CDB引擎和GDB引擎所支持的。无奈放弃,又涨见识了,大牛莫怪,俺是菜鸟...

转念一想,既然我使用cdb启动太慢,调试太卡,肯定是CDB的问题,也许是获取调试符号的问题,所以我打开我项目配置:Tools->options->Build & Run->Kits:

点Debugger后面的编辑后出现了Debugger for ... Windows Console Debugger executable此链接对qtcreator在vs编译器下

Debugging executables built with the Microsoft Visual Studio compilers in Qt Creator

作了简单介绍,我总结了一下一共有两点可以为我采用:

(1). 调试过程可能会因为过时的.pdb符号文件变慢,采用清理的方法可以避免这个问题。但是一直递增的链接过程也会让调试变慢。

解决方法:1 :在debug前执行clean操作  2. 在项目中加入编译器选项 :

  1. QMAKE_LFLAGS_DEBUG += /INCREMENTAL:NO

可以禁用递增链接操作

但是我做了两种操作后,想过并不理想

(2). 在第一次执行debug的时候,系统会弹出配置Symbol server的提示框,符号服务器会提供操作系统和编译运行库的调试信息,并且初始化下载符号会很耗时。

解决方法:关闭系统符号服务器。哈哈终于解决了问题。下面是关闭方法。

Tools->Options->Debugger->CDB->Sysbol Paths-> Edit->insert

然后找到 C:\Users\%user%\AppData\Local\Temp\symbolcache 执行delete line即可

然后再回到项目执行debug试试,哈哈启动快,但不执行快,一个字:很爽。。。

原因分析:因为在每次执行debug的时候,cdb都会链接symbol server来下载所需要的符号,因此会启动很慢,估计在debug过程中也有下载操作,所以有时候但不执行也会很慢。

解决方法缺点:由于关闭了符号服务器,在调试到系统的运行库的时候也许无法跟踪,或者提示找不到符号的错误。

补充解决方案:

使用 SymChk.exe 实用程序下载符号

您可以使用 SymChk.exe 实用程序验证符号并以方便、非入侵性的方式生成本地符号高速缓存。SymChk.exe 实用程序随 Debugging Tools for Windows 软件包提供。SymChk.exe 是一种命令行工具。您可能需要将 Debugging Tools for Windows 软件包的文件夹添加到系统上的 PATH 环境变量,以便从任意命令提示符下访问该工具。

要使用 SymChk.exe 实用程序下载 Windows\System32 文件夹中所有组件的符号文件,请使用以下命令行命令:

symchk /rc:\windows\system32  /s SRV*your local symbol folder\*http://msdl.microsoft.com/download/symbols
整个过程可能会持续N个小时,因为win32下的动态库太多,个人感觉无需全部下载。在下载完成以后

Tools->Options->Debugger->CDB->Sysbol Paths-> Edit->add

your local symbol folder添加到符号路径,这样debug过程中所需要的符号都会从本地搜索不会再链接符号服务器,也就不会再卡了。

如果有什么问题,还请指正。

http://blog.csdn.net/superzhaifd/article/details/23955701

关于qtcreator+vs2008+CDB调试太卡的问题研究(载入符号表,以及VS调试器的注册表信息)的更多相关文章

  1. msconfig设置调试开启 关闭 操作注册表项是

    经过测试   9dea862c-5cdd-4e70-acc1-f32b644d4795  这个项每个系统都是固定的.这个项里面的  Elements 里面项也是固定的.在 24000001 项里的 E ...

  2. 【VS调试】C#读写Windows 7注册表时抛出“不允许所请求的注册表访问权”的解决办法

    原文:[VS调试]C#读写Windows 7注册表时抛出"不允许所请求的注册表访问权"的解决办法 项目 - 属性 - 安全性,"使用ClickOnce",修改a ...

  3. React Native调试实用技巧,React Native开发者必会的调试技巧

    在做React Native开发时,少不了的需要对React Native程序进行调试.调试程序是每一位开发者的基本功,高效的调试不仅能提高开发效率,也能降低Bug率.本文将向大家分享React Na ...

  4. 配置QtCreator+CDB远程调试环境(用到了符号表) good

    相关环境信息:开发机Win7 x64.远程机器WinXP.调试器是CDB.Qt版本5.2.1 一.部署远程机器环境 我这里用的是虚拟机(Windows XP),根据你要调试的程序选择安装不同架构的Wi ...

  5. VS2008 环境中完美搭建 Qt 4.7.4 静态编译的调试与发布(好像很不错,有六张插图说明)good

    为什么要在VS2008中使用QT静态编译呢?很简单,因为VS2008编译器编译出来的文件比mingw编译的要几乎小一半. 好了现在我们来做些准备工作,VS2008自然要安装的,然后打上SP1的补丁.然 ...

  6. VS2008 环境中完美搭建 Qt 4.7.4 静态编译的调试与发布(很不错,有六张插图说明,修改qmake.conf里的MD参数等)good

    为什么要在VS2008中使用QT静态编译呢?很简单,因为VS2008编译器编译出来的文件比mingw编译的要几乎小一半. 好了现在我们来做些准备工作,VS2008自然要安装的,然后打上SP1的补丁.然 ...

  7. VS2015调试时没有启动IIS Express Web服务器 或者停止调试时 IIS Express 跟着关闭

    解决方法: 打开 解决方案资源管理器 -> 点选 Web 项目选择 -> 属性 -> Web "服务器"  去掉勾选"将服务器设置应道所有用户" ...

  8. IISExpress 调试使用学习,使用附加到进程进行快速调试

    IIS8.0 Express已经推出了,大家可以通过Microsoft Web Platform Installer 进行安装.(VS2012,VS2013已经内置了,不需安装了) 1.IIS Exp ...

  9. javascript在调试bug的奇淫技巧(Chrome, Firebug, Filddle 调试)

    Fiddler Fiddler调式使用知多少(一)深入研究 微信fiddle 微信fiddle Chrome Google Chrome 官方 Chrome - 基础 Chrome - 进阶 Chro ...

随机推荐

  1. Method and system for providing security policy for linux-based security operating system

    A system for providing security policy for a Linux-based security operating system, which includes a ...

  2. Objective-C的基础数据结构

    类的数据结构 Class(指针) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 typedef struct objc_c ...

  3. Python Tricks(二十一)—— 排列组合的计算

    使用循环: 阶乘的实现: def fac(n): r = 1. for i in range(1, n+1): r *= i return r 排列:Anm=m!n!=(m−n+1)⋯m def pe ...

  4. python 和为S的连续正数序列

    题目描述: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久, ...

  5. 关于iis里面 .net framework 版本的切换

    然而,即便这样还是不够的 在iis上浏览网站会报以下错误: 这是什么原因呢?这是因为应用程序池中没有使用asp.net v4.0 网站程序是用v4.0写的,所以我们要用4.0的程序池版本,当前应用程序 ...

  6. ASP.NET Core Identity 框架 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Identity 框架 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 框架 前面我们使用了 N 多个章节, ...

  7. 用游戏杆控制WPF中三维模型

    原文:用游戏杆控制WPF中三维模型 用游戏杆控制WPF中三维模型   今天心情比较好,不写WF的文章了,换个主题.写一个我最最最擅长的内容.   例子下载: http://files.cnblogs. ...

  8. 运行时动态伪造vsprintf的va_list

    运行时动态伪造vsprintf的va_list #include <stdio.h> int main() { char* m = (char*) malloc(sizeof(int)*2 ...

  9. CommandParameter binding Introduction:

    Design Patterns SampleCode https://csharpdesignpatterns.codeplex.com/ DevExpress Support Center http ...

  10. js 动态操作元素

    <!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...