如何使用 gprof 来分析守护进程而不优雅地终止它?

Jin*_*gle 5 c++ gprof

需要分析用 C++ 编写的守护进程,gprof 说它需要终止进程以获取 gmon.out。我想知道有人有使用 ctrl-c 获取 gmon.out 的想法吗?我想找出cpu周期的热点

Dum*_*001 3

需要分析一个用C++编写的守护进程,gprof说它需要终止进程才能获取gmon.out。

这符合调试守护进程进程的正常做法:提供一个开关(例如使用命令行选项),该开关将强制守护进程在前台运行。

我想知道有人有想法用 ctrl-c 获取 gmon.out 吗?

我不知道有这样的选择。

尽管在 gmon 的情况下,调用 toexit()就足够了:例如,如果您打算测试说处理 100K 消息,您可以在代码中添加一个计数器,在每个处理的消息上递增。当计数器超过限制时,只需调用exit()

您还可以尝试为某些未使用的信号(例如 SIGUSR1 或 SIGUSR2)添加处理程序并exit()从那里调用。我认为我没有个人经验,无法确定 gmon 在这种情况下能否正常工作。

我想找出cpu周期的热点

我通常的做法是创建一个测试应用程序,使用与守护程序相同的源代码,但main()在模拟需要调试或测试的精确场景(通常使用命令行切换许多场景)时有所不同。为此,我通常创建一个包含整个模块(除了文件)的静态库main(),并将测试应用程序与静态库链接。(这有助于保持 Makefile 整洁。)

我更喜欢单独的测试应用程序而不是侵入代码内部,因为特别是在性能测试的情况下,我有时可以绕过或减少对昂贵的 I/O(或数据库访问)的调用,这通常会扭曲探查器的采样并使输出变得无用。