黑客的故事
日期是2010年12月2日。圣诞节前的日子不多了,作为Windows程序员,我几乎遇到了一个主要障碍。我一直在使用AQTime,尝试过困倦,发亮和非常困倦,而正如我们所说的,VTune正在安装。我曾尝试使用VS2008 Profiler,但它一直在积极地惩罚着人们,而且常常是不明智的。我使用了随机暂停技术。我已经检查了呼叫树。我已经解雇了功能痕迹。但令人悲伤的事实是,我正在使用的应用程序超过一百万行代码,可能还有价值一百万行的第三方应用程序。
我需要更好的工具。 我已经阅读了其他主题。 我已经尝试了每个主题中列出的每个事件探查器。简直就是必须有比这些笨拙而昂贵的选择更好的东西,或者可笑的工作量几乎没有收益。更复杂的是,我们的代码具有大量线程,并运行许多Qt Event循环,其中某些循环如此脆弱,以至于它们由于时序延迟而在繁重的测试中崩溃。不要问我为什么我们要运行多个事件循环。没有人能告诉我。
在Windows环境中,Valgrind还有更多选择吗?
有没有比我已经尝试过的一堆破烂的工具更好的东西了?
是否有任何旨在与Qt集成的东西,也许可以在队列中显示有用的事件?
我尝试过的工具的完整列表,以及在斜体中真正有用的工具:
- AQTime:很好!深度递归会遇到一些麻烦,但是在这些情况下,调用图是正确的,并且可以用来消除您可能遇到的任何混乱。不是一个完美的工具,但是值得尝试。它可能适合您的需求,并且在大多数情况下对我来说已经足够了。
- 调试模式下的随机暂停攻击:没有足够的时间信息。
一个好的工具,但不是一个完整的解决方案。 - 并行工作室: 核选项。引人入胜,古怪而疯狂。我认为您应该进行30天的评估,并确定是否合适。这也太酷了。
- AMD Codeanalyst:很棒 ,易于使用,非常容易崩溃,但是我认为这是环境问题。我建议您尝试一下,因为它是免费的。
- 卢克·斯塔克沃克(Luke Stackwalker):在小型项目上运行良好,这是在尝试使其在我们的项目上运行。虽然有一些不错的结果,但是它绝对可以代替Sleepy来完成我的个人任务。
- PurifyPlus:不支持Win-x64环境,最主要的是Windows7。否则,它非常出色。我在其他部门的许多同事对此表示肯定。
- VS2008 Profiler:在功能跟踪模式下以所需的分辨率产生100 + gigs范围的输出。从好的方面来说,产生可靠的结果。
- GProf:要求GCC还要适度有效。
- VTune:VTune的W7支持犯罪分子的边界。否则优秀
- PIN:我需要破解我自己的工具,所以这是最后的选择。
- Sleepy \ VerySleepy:对于较小的应用程序很有用,但在这里让我失望。
- EasyProfiler:如果您不介意使用一些手动注入的代码来指示要检测的位置,那还不错。
- Valgrind:仅* nix,但在那种环境下非常好。
- OProfile:仅Linux。
- 亵渎:他们射击野马。
我没有尝试过的建议工具:
- XPerf:
- 发光代码:
- 开发伙伴:
注意:目前是 Intel环境。VS2008,增强库。Qt 4+。而所有这些令人沮丧的杂物:通过trolltech进行Qt / MFC集成。
现在:大约两周后,看来我的问题已解决。借助各种工具,包括列表中的几乎所有内容以及我的一些个人技巧,我们找到了主要的瓶颈。但是,我将继续测试,探索和尝试新的探查器以及新技术。为什么?因为我欠你们,因为你们摇滚。它确实使时间线放慢了一点,但是我仍然很高兴继续尝试新工具。
简介
在许多其他问题中,最近将许多组件切换到了错误的线程模型,由于下面的代码突然不再是多线程的,导致了严重的问题。我不能说太多,因为它违反了我的NDA,但是我可以告诉您,通过偶然检查甚至常规代码检查都不会发现它。如果没有探查器,通话记录和随机暂停的共同作用,我们仍然会对天空的美丽蓝色弧线大怒。值得庆幸的是,我与一些我见过的最好的黑客一起工作,而且我可以接触到一个充满了强大工具和才华横溢的“诗篇”。
绅士们,我非常感谢您,很遗憾,我没有足够的代表来奖励你们每个人。我仍然认为,这是一个重要的问题,比到目前为止我们在SO上获得的答案更好。
因此,在接下来的三周中,每周我将尽我所能提供最大的赏金,并用我认为并不常见的最好的工具将其奖励给答案。三个星期后,希望您能对我的探查器有一个完整的了解,请原谅。
外卖
使用探查器。对于Ritchie,Kernighan,Bentley和Knuth来说,它们足够好。我不在乎你以为你是谁。使用探查器。如果找到的那个不起作用,请找到另一个。如果找不到,请编码一。如果您无法编写一个代码,或者是一个小的挂断,或者只是被卡住,请使用随机暂停。如果其他所有方法都失败了,请雇用一些研究生来进行探查。
更长的视野
因此,我认为撰写回顾展可能会很好。我选择与Parallel Studios进行广泛合作,部分原因是它实际上是基于PIN工具构建的。与一些研究人员进行过学术往来后,我觉得这可能是某种品质的标志。幸运的是,我是对的。虽然GUI有点令人恐惧,但我发现IPS非常有用,尽管我不能为所有人推荐它。至关重要的是,没有明显的方法来获取行级命中数,这是AQT和许多其他探查器提供的,并且我发现对于检查分支选择率等非常有用。在网络上,我也很喜欢使用AQTime,而且我发现他们的支持非常有效。同样,我必须符合我的建议:它们的许多功能不能很好地工作,其中一些在Win7x64上非常容易崩溃。XPerf的性能也令人赞叹,但对于在某些类型的应用程序上获得良好读取所需的采样细节而言,它的速度实在令人沮丧。
现在,我不得不说,我认为在W7x64环境中没有确定的C ++代码概要分析选项,但是肯定有一些选项根本无法执行任何有用的服务。