当一个软件卡住、对用户输入没有响应并且不更新其显示时,如何准确确定它正在做什么?
我尝试过 oprofile,它记录了正在执行的函数,但它没有给我足够的线索。它会计算运行期间发生的所有事情,而我只需要查看样本程序卡住时发生的情况。
问题可能涉及中断、等待网络套接字、计时器、GUI 事件处理程序或谁知道是什么。如何尽可能多地了解正在发生的事情,而不仅仅是每个线程的执行点?
感兴趣的软件在 Linux 上运行,使用 gcc 构建,主要是 C++,但可能涉及其他语言,包括解释语言,例如Python。
现在特别值得关注的是 Firefox,我已经检查了它的源代码。 Firefox 会随机频繁地暂停所有输入和屏幕输出,每次大约 5-10 秒。即使有人把这个特殊问题的解决方案交给我,我当然会接受,但仍然会问。如果可能的话,我想学习适用于任何软件的通用技术,尤其是我负责的软件。
strace http://en.wikipedia.org/wiki/Strace将追踪系统调用。这可能会给出一些有关网络套接字上阻塞的信息等的指示。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)