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