C 分析linux中作为服务运行的代码

C 分析linux中作为服务运行的代码,c,profiling,valgrind,gprof,C,Profiling,Valgrind,Gprof,也许这个问题是noobish提出的,但我不太熟悉unix环境和分析 我想分析一个在Ubuntu上作为服务运行的用C编写的服务器代码(我用service命令启动它)。一旦启动,它将侦听请求,然后执行一些操作 我无法理解如何使用gprof、valgrind和sprof等工具准确地进行分析 我已经尝试了这三种方法,但无法生成任何日志 我尝试了valgrind,但它只是执行,并不等待实际请求的到来 已使用gprof和sprof,但未生成任何文件 我查看了SO和其他站点上的几个示例,但它们讨论了生成可执行

也许这个问题是noobish提出的,但我不太熟悉unix环境和分析

我想分析一个在Ubuntu上作为服务运行的用C编写的服务器代码(我用service命令启动它)。一旦启动,它将侦听请求,然后执行一些操作

我无法理解如何使用gprof、valgrind和sprof等工具准确地进行分析

我已经尝试了这三种方法,但无法生成任何日志

我尝试了valgrind,但它只是执行,并不等待实际请求的到来

已使用gprof和sprof,但未生成任何文件

我查看了SO和其他站点上的几个示例,但它们讨论了生成可执行文件并运行的示例代码

我现在真的需要一些帮助


谢谢

您能在GDB下运行它(在调试版本中)吗?然后是一种方法,可以让你找到任何加速。谢谢。我已经看过你的帖子了,这对我来说实在是太多了。坦率地说,我不是专家,对GDB一点也不满意。:)但是,我尽力了。无论如何,我修复了一些提高性能的东西,但我不确定如何修复,GDB也有问题,核心是生成的,但当我运行bt full时,它什么也没有显示。当我使用GDB时,我键入Control-C来停止程序。然后在GDB中输入“thread1”将其放在主线程上。然后我输入“bt”,它会显示堆栈跟踪停止的位置。我研究它,看看它在做什么。在我理解之后,我输入“c”,这样它将继续执行。然后我再次输入Control-C。如果程序在我有机会中断之前就完成了,我会加入一个临时的外部循环,这样它就会一遍又一遍地执行。这在Windows-Unix上应该是一样的。一旦我能够找到在GDB中没有得到任何东西的原因,我将尝试这个方法。感谢您的帮助。user3275095,您可以尝试一些现代的探查器,如
perf
(linux)perf top-p PID,其中PID是您服务的PID;或者
perf record-p PID
,提供一些请求,然后在
perf
控制台和
perf report
中按Ctrl-C键。