我一直在测试the performance and memory profiler AQTime,看看是否值得为我的Delphi应用程序花费那么大的$$$。
令我惊讶的是它如何在不修改应用程序源代码且不添加过多数量的情况下为您提供源行级别性能跟踪(包括每行执行的次数和行所用的时间)调试运行的时间。
他们如此高效地这样做的方式让我觉得这里可能会使用一些我不知道的技术/技术,这对我们来说是有用的。
您是否知道他们使用哪种方法逐行捕获执行而无需更改代码?
是否还有其他分析工具也可以进行非侵入式逐行检查,如果有,他们是否使用相同的技术?
答案 0 :(得分:9)
我为Delphi制作了一个开源分析器,它做了同样的事情: http://code.google.com/p/asmprofiler/
这不完美,但它是免费的:-)。也使用了Detour技术。 它存储每个呼叫(您必须手动设置要分析的功能), 所以它可以制作一个精确的呼叫历史树,包括时间表(!)。
答案 1 :(得分:7)
这只是猜测,但也许AQtime基于一种类似于Microsoft Detours的技术?
Detours是一个用于检测的库 x86,x64上的任意Win32函数, 和IA64机器。 Detours拦截 通过重写Win32函数 目标函数的内存中代码。
答案 2 :(得分:2)
我并不特别了解Delphi,但是C应用程序调试器可以相对容易地进行逐行分析 - 它可以加载代码并将每个代码路径与代码块相关联。然后它可以打破所有条件跳转指令,只需观察并查看采用的代码路径。像gdb这样的调试器可以相对有效地运行,因为它们通过内核工作而不修改代码,它们只是在每行执行时得到通知。如果某些东西导致块提前退出(longjmp),调试器可以挂钩并计算它发生时进入块的距离并仅增加这些行。
当然,编码仍然很难,但是当我轻易地说,我的意思是你可以做到这一点而不会浪费时间来打破每一条更新计数器的指令。
答案 3 :(得分:2)
长期以来已经不复存在的TurboPower还为Delphi提供了一个很棒的分析/分析工具,名为Sleuth QA Suite。我发现它比AQTime简单得多,但也更容易获得有意义的结果。可能值得尝试追踪 - 也许是eBay?