debugging - 解决粘性问题的方法

标签 debugging profiling

当一个软件卡住、对用户输入没有响应并且不更新其显示时,如何准确确定它正在做什么?

我尝试过oprofile,它记录了正在执行的函数,但它没有给我足够的线索。它会计算运行期间发生的所有事情,而我只需要查看样本程序卡住时发生的情况。

问题可能涉及中断、等待网络套接字、计时器、GUI 事件处理程序或谁知道是什么。如何尽可能多地了解正在发生的事情,而不仅仅是每个线程的执行点?

感兴趣的软件在 Linux 上运行,使用 gcc 构建,主要是 C++,但可能涉及其他语言,包括解释语言,例如Python。

现在特别值得关注的是 Firefox,我已经检查了它的源代码。 Firefox 会随机频繁地暂停所有输入和屏幕输出,每次大约 5-10 秒。即使有人给了我这个特殊问题的解决方案,我当然会接受,但仍然会问。如果可能的话,我想学习适用于任何软件的通用技术,尤其是我负责的软件。

最佳答案

strace将追踪系统调用。这可能会给出一些有关网络套接字上阻塞的情况的指示等等。

关于debugging - 解决粘性问题的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1834103/

相关文章:

c++ - 命中 GDB 断点时自动调用应用程序代码中的函数

css - 调试级联样式表中的颜色

java - 引用初始化为 null 的对象数组中的槽

netbeans - Netbeans 分析器的 "Self Time"实际上意味着什么?

iOS Metal : How to Capture GPU Frame properly?

java - Java 应用程序会因 -Xdebug 的存在而变慢还是仅在单步执行代码时变慢?

debugging - 如何在VSCode Debug模式下显示整个值

python - 如何分析 Python 中的异常处理?

arrays - 分析帮助 : slow matrix-scalar assignment

profiling - 学习如何使用 DTrace 的指针