【发布时间】:2011-04-14 04:44:38
【问题描述】:
昨天我在阅读有关调试技术的文章,发现 Valgrind 非常有趣。它似乎使用了来自动态代码分析的技术。我从原始参考链接到另一个名为 Path Profiling 的链接。
我尝试了谷歌搜索,但我想我使用了错误的术语来搜索这些概念的良好参考。考虑到我没有编译器和编程语言的背景,有人可以推荐一个好的资源吗?
【问题讨论】:
标签: c debugging testing profiling valgrind
昨天我在阅读有关调试技术的文章,发现 Valgrind 非常有趣。它似乎使用了来自动态代码分析的技术。我从原始参考链接到另一个名为 Path Profiling 的链接。
我尝试了谷歌搜索,但我想我使用了错误的术语来搜索这些概念的良好参考。考虑到我没有编译器和编程语言的背景,有人可以推荐一个好的资源吗?
【问题讨论】:
标签: c debugging testing profiling valgrind
路径分析作为一个理论问题很有趣。 gprof 也很有趣,因为它处理调用图、循环子图等。有很好的算法可以处理这些信息并在整个结构中传播测量值。
所有这些都可能会诱使您认为它有效(尽管他们从未说过有效)- 用于发现一般性能问题。
但是,假设您的程序挂起。你是怎么发现问题的?
我所做的是让它进入无限循环,然后中断(暂停)它以查看它在做什么。我查看调用堆栈每一层的代码,因为我知道循环在堆栈的某个位置。如果它不是很明显,我只是一步一步地走,直到我看到它重复自己,然后我知道问题出在哪里。我怀疑几乎任何人都会这样做。
事实上,如果您在程序运行时间过长时停止程序并多次检查其状态,您不仅可以找到无限循环,而且几乎可以发现程序运行时间超出您希望的任何问题。
有基于此概念的分析器工具,例如 Zoom 和 LTProf,但在我看来,没有什么比彻底理解代表性快照更能提供洞察力了。
你不会找到关于这项技术的好的参考资料,因为(奇怪的是)没有多少人知道它,而且发布起来太简单了。
There's considerably more to say on the subject.
实际上,FWIW,我“发表”了一篇关于它的文章,但它只是由编辑审阅,我认为没有人真正阅读过它:Dunlavey,“性能调优与指令级成本源自调用-堆栈采样”,ACM SIGPLAN Notices 42, 8(2007 年 8 月),第 4-8 页。
【讨论】: