当一个软件卡住、对用户输入没有响应并且不更新其显示时,如何准确确定它正在做什么?
我尝试过oprofile,它记录了正在执行的函数,但它没有给我足够的线索。它会计算运行期间发生的所有事情,而我只需要查看样本程序卡住时发生的情况。
问题可能涉及中断、等待网络套接字、计时器、GUI 事件处理程序或谁知道是什么。如何尽可能多地了解正在发生的事情,而不仅仅是每个线程的执行点?
感兴趣的软件在 Linux 上运行,使用 gcc 构建,主要是 C++,但可能涉及其他语言,包括解释语言,例如Python。
现在特别值得关注的是 Firefox,我已经检查了它的源代码。 Firefox 会随机频繁地暂停所有输入和屏幕输出,每次大约 5-10 秒。即使有人给了我这个特殊问题的解决方案,我当然会接受,但仍然会问。如果可能的话,我想学习适用于任何软件的通用技术,尤其是我负责的软件。
最佳答案
strace将追踪系统调用。这可能会给出一些有关网络套接字上阻塞的情况的指示等等。
关于debugging - 解决粘性问题的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1834103/