12

我一直在测试性能和内存分析器 AQTime,看看是否值得为我的 Delphi 应用程序花费大笔资金。

令我惊讶的是,它如何在不修改应用程序的源代码和不增加过多时间到调试运行。

他们如此有效地执行此操作的方式使我认为这里可能使用了一些我不知道的技术/技术,这对了解会很有用。

你知道他们使用什么样的方法来逐行捕获执行而无需更改代码?

是否还有其他分析工具也可以进行非侵入性逐行检查,如果有,它们是否使用相同的技术?

4

4 回答 4

9

我为 Delphi 制作了一个开源分析器,它做同样的事情: http ://code.google.com/p/asmprofiler/

它并不完美,但它是免费的:-)。也是使用Detour技术。它存储每个呼叫(您必须手动设置要分析的功能),因此它可以制作准确的呼叫历史树,包括时间表(!)。

于 2009-03-23T08:38:07.057 回答
7

这只是猜测,但也许 AQtime 是基于类似于Microsoft Detours的技术?

Detours 是一个库,用于在 x86、x64 和 IA64 机器上检测任意 Win32 函数。Detours 通过重写目标函数的内存代码来拦截 Win32 函数。

于 2008-11-27T04:37:52.283 回答
2

我不特别了解 Delphi,但是 C 应用程序调试器可以相对轻松地进行逐行分析 - 它可以加载代码并将每个代码路径与代码块相关联。然后它可以中断所有条件跳转指令,然后观察并查看采用了什么代码路径。像 gdb 这样的调试器可以相对有效地运行,因为它们通过内核工作并且不修改代码,它们只是在每行执行时得到通知。如果某些事情导致块提前退出(longjmp),调试器可以挂钩并计算它发生时它进入块的距离并仅增加这些行。

当然,编写代码仍然很困难,但是当我说简单时,我的意思是您可以做到这一点,而无需浪费时间在每条指令上进行更新以更新计数器。

于 2008-11-26T22:07:03.523 回答
2

早已不复存在的 TurboPower 还为 Delphi 提供了一个很棒的分析/分析工具,称为 Sleuth QA Suite。我发现它比 AQTime 简单得多,但也更容易获得有意义的结果。可能值得尝试追踪 - eBay,也许?

于 2008-11-26T22:24:06.890 回答