查找应用程序等待的位置



在Debian 10中更新后,即使没有文档,PDF查看器Atril(Evence的一个分支(也需要大约25秒才能启动。以前它几乎是瞬间的。现在我需要找出造成这种延迟的原因。当我通过strace命令运行Atril时,它每次都会在不同的系统调用时暂停,因此我无法从中得出任何结论。接下来,我从源代码构建了Atril,并在gdb调试器中运行它,但在那里我只能看到几个线程正在创建和退出。如何找出源代码中延迟的位置?

您可以在调试器中运行程序,然后使用Ctrl+C中断它几次。每次,使用wherebt查看执行中的位置。这里对这种方法有一个很好的解释。您可能希望在编译时启用调试符号(GCC:-g(。此外,如果启用了优化,编译后的代码可能与原始源代码有很大不同,因此只使用调试优化级别(GCC:-Og(可能是有意义的。

如果有一个步骤导致了这种巨大的延迟,这应该可以让你立即识别它

否则,你可以看看这个问题的其他答案。linux上的评测工具包括valgrind和perf工具。

对于perf,请记住,如果您的程序实际上不是在执行,而是在等待,例如IO,那么基于采样的方法可能会误导您

最新更新