首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AQTime如何做到这一点呢?

AQTime如何做到这一点呢?
EN

Stack Overflow用户
提问于 2008-11-26 22:02:30
回答 4查看 2.9K关注 0票数 12

我一直在测试the performance and memory profiler AQTime,看看为我的Delphi应用程序花费这些大的$$$是否值得。

令我惊讶的是,它如何在不修改应用程序源代码和不向调试运行添加过多时间的情况下,为您提供源代码级性能跟踪(包括每行的执行次数和所花费的时间)。

他们如此高效地完成这项工作的方式让我认为,这里可能使用了一些我不知道的技术/技术,了解一下这些技术/技术可能会很有用。

您知道他们使用哪种方法来逐行捕获执行过程,而无需更改代码吗?

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-11-27 04:37:52

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

Detour是一个用于在x86、x64和IA64机器上插入任意Win32函数的库。

通过重写目标函数的内存中代码来截取目标函数。

票数 7
EN

Stack Overflow用户

发布于 2009-03-23 08:38:07

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

它不是完美的,但它是免费的:-)。也使用了绕道技术。它存储每个调用(您必须手动设置要分析的函数),因此它可以创建准确的调用历史树,包括时间图(!)。

票数 9
EN

Stack Overflow用户

发布于 2008-11-26 22:07:04

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

当然,编写代码仍然很困难,但当我说很容易时,我的意思是您可以轻松地完成这项工作,而不会浪费时间在更新计数器的每条指令上中断。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/322315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档