c – 如何使用gprof配置守护程序进程而不正常终止它?

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

Need to profile a daemon written in C++, gprof says it need to terminate the process to get the gmon.out.

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

I’m wondering anyone has ideas to get the gmon.out with ctrl-c?

我不知道这些选择.

虽然在gmon的情况下,call to exit() should suffice:如果您打算测试说处理100K消息,您可以在代码中添加一个计数器,在每个处理过的消息上递增.当计数器超出限制时,只需调用exit()即可.

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

I want to find out the hot spot for cpu cycle

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

我更喜欢单独的测试应用程序来破解代码内部,因为特别是在性能测试的情况下,我有时可以绕过或减少对昂贵的I / O(或DB访问)的调用,这通常会使分析器的采样偏斜并使输出无用.

点赞