【问题标题】:Any references on Dynamic Code Analysis?关于动态代码分析的任何参考资料?
【发布时间】:2011-04-14 04:44:38
【问题描述】:

昨天我在阅读有关调试技​​术的文章,发现 Valgrind 非常有趣。它似乎使用了来自动态代码分析的技术。我从原始参考链接到另一个名为 Path Profiling 的链接。

我尝试了谷歌搜索,但我想我使用了错误的术语来搜索这些概念的良好参考。考虑到我没有编译器和编程语言的背景,有人可以推荐一个好的资源吗?

【问题讨论】:

    标签: c debugging testing profiling valgrind


    【解决方案1】:

    路径分析作为一个理论问题很有趣。 gprof 也很有趣,因为它处理调用图、循环子图等。有很好的算法可以处理这些信息并在整个结构中传播测量值。

    所有这些都可能会诱使您认为它有效(尽管他们从未说过有效)- 用于发现一般性能问题。

    但是,假设您的程序挂起。你是怎么发现问题的?

    我所做的是让它进入无限循环,然后中断(暂停)它以查看它在做什么。我查看调用堆栈每一层的代码,因为我知道循环在堆栈的某个位置。如果它不是很明显,我只是一步一步地走,直到我看到它重复自己,然后我知道问题出在哪里。我怀疑几乎任何人都会这样做。

    事实上,如果您在程序运行时间过长时停止程序并多次检查其状态,您不仅可以找到无限循环,而且几乎可以发现程序运行时间超出您希望的任何问题。

    有基于此概念的分析器工具,例如 ZoomLTProf,但在我看来,没有什么比彻底理解代表性快照更能提供洞察力了。

    你不会找到关于这项技术的好的参考资料,因为(奇怪的是)没有多少人知道它,而且发布起来太简单了。

    There's considerably more to say on the subject.


    实际上,FWIW,我“发表”了一篇关于它的文章,但它只是由编辑审阅,我认为没有人真正阅读过它:Dunlavey,“性能调优与指令级成本源自调用-堆栈采样”,ACM SIGPLAN Notices 42, 8(2007 年 8 月),第 4-8 页。

    【讨论】:

    • +1 用于学术界讨厌的简单解决方案。 :-) 实际上,您的方法的最大好处之一是它不会因观察而受到性能变化的影响。
    • @R..:我是一名学者,我喜欢教学,但我可以看到学术界是一个回音室,很大程度上与现实世界的输入隔离,可以引导他们的思维变得更有用方向。
    • +1 您的时间和解释。事实上非常好。我目前正在旅行,因此无法访问 ACM。我回去工作时会看报纸。我真的很喜欢你的大胆声明:“发布太简单了”:)
    猜你喜欢
    • 1970-01-01
    • 2010-12-26
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多