我正在做一个项目,我需要找到在给定特定输入的各种Linux程序(用C编写)中调用了哪些函数。我目前的方法是使用-pg(分析选项)编译一个程序,运行它,然后通过处理gprof的输出找到调用了哪些函数。只有至少被调用一次的函数才会出现在输出文件中。明显的问题是只有一个进程可以写入gprof输出文件。如果程序fork多个进程,我不会从其他进程获得任何分析输出。有没有办法让gprof为每个进程(可能用pid标记)生成一个输出文件?该手册建议将每个进程更改为不同的目录,但我不想修改源代码来执行此操作。是否有其他适用于Linux的工具可以提供帮助? 最佳答案
我正在做一个项目,我需要找到在给定特定输入的各种Linux程序(用C编写)中调用了哪些函数。我目前的方法是使用-pg(分析选项)编译一个程序,运行它,然后通过处理gprof的输出找到调用了哪些函数。只有至少被调用一次的函数才会出现在输出文件中。明显的问题是只有一个进程可以写入gprof输出文件。如果程序fork多个进程,我不会从其他进程获得任何分析输出。有没有办法让gprof为每个进程(可能用pid标记)生成一个输出文件?该手册建议将每个进程更改为不同的目录,但我不想修改源代码来执行此操作。是否有其他适用于Linux的工具可以提供帮助? 最佳答案
我想从gprof生成的输出中排除一些函数。换句话说,我不希望在计算每个函数在执行期间花费的时间百分比时将它们包括在内。我在一处看到可以使用-E选项。但是我正在使用gprof-Efunction_to_be_exludedmy_program_name,但没有任何反应。手册说它已贬值,您应该改用symspecs。然而,我已经浪费了半个小时试图弄清楚如何用symspecs来实现它,但没有运气。任何人都可以在这方面帮助我。 最佳答案 确切地说,gprof-e-E已被弃用并被具有参数-symspecs的较新相关选项的使用所取代。所以尝试使用
我想从gprof生成的输出中排除一些函数。换句话说,我不希望在计算每个函数在执行期间花费的时间百分比时将它们包括在内。我在一处看到可以使用-E选项。但是我正在使用gprof-Efunction_to_be_exludedmy_program_name,但没有任何反应。手册说它已贬值,您应该改用symspecs。然而,我已经浪费了半个小时试图弄清楚如何用symspecs来实现它,但没有运气。任何人都可以在这方面帮助我。 最佳答案 确切地说,gprof-e-E已被弃用并被具有参数-symspecs的较新相关选项的使用所取代。所以尝试使用
我有一个程序,其中大量时间用于加载和保存数据。现在我想知道每个函数花费了多少时间,以占总运行时间的百分比表示。但是,我想从探查器考虑的总时间中排除加载和保存函数所花费的时间。有没有办法使用gprof或任何其他流行的分析器来做到这一点? 最佳答案 同样你可以使用valgrind--tool=callgrind--collect-atstart=no--toggle-collect=要查看的其他选项:--instr-atstart#toavoidruntimeoverheadwhilenotprofiling获取指令级统计数据:--co
我有一个程序,其中大量时间用于加载和保存数据。现在我想知道每个函数花费了多少时间,以占总运行时间的百分比表示。但是,我想从探查器考虑的总时间中排除加载和保存函数所花费的时间。有没有办法使用gprof或任何其他流行的分析器来做到这一点? 最佳答案 同样你可以使用valgrind--tool=callgrind--collect-atstart=no--toggle-collect=要查看的其他选项:--instr-atstart#toavoidruntimeoverheadwhilenotprofiling获取指令级统计数据:--co
使用gprof时:$gprofoptions[executable-file[profile-data-files...]][>outfile]如果您可以选择传递给可执行文件,例如:gprofa.out--varfred=32然后gprof假定我将一个无效选项传递给它,而不是传递给正在分析的程序(a.out)。有什么办法可以解决这个问题? 最佳答案 您不使用gprof运行可执行文件,因此您只需指定它以便gprof可以加载符号。您首先像往常一样单独运行可执行文件,然后它会发出分析数据。这些数据与可执行文件一起由gprof稍后加载。这一
使用gprof时:$gprofoptions[executable-file[profile-data-files...]][>outfile]如果您可以选择传递给可执行文件,例如:gprofa.out--varfred=32然后gprof假定我将一个无效选项传递给它,而不是传递给正在分析的程序(a.out)。有什么办法可以解决这个问题? 最佳答案 您不使用gprof运行可执行文件,因此您只需指定它以便gprof可以加载符号。您首先像往常一样单独运行可执行文件,然后它会发出分析数据。这些数据与可执行文件一起由gprof稍后加载。这一
根据time(),我在一个C++程序上运行了gprof,耗时16.637s,我在第一行得到了这个输出:%cumulativeselfselftotaltimesecondssecondscallss/calls/callname31.070.320.3254980210.000.00[whatever]如果只用了.32秒,为什么它会列出31.07%的时间?这是每次通话时间吗?(那不是selfs/call吗?)这是我第一次使用gprof,所以请多关照:)编辑:通过向下滚动,gprof似乎只认为我的程序需要1.03秒。为什么它会出错? 最佳答案
我尝试使用gprof分析我的C++程序。该程序本身运行了大约53秒,所以我不明白为什么它说,main只运行了大约8.29秒。有什么解释吗?摘录如下:index%timeselfchildrencalledname[2]20.50.008.29main[2]0.008.281/1MPQS::start(std::basic_ofstream>&)[3]0.000.011/1MPQS::MPQS(NTL::ZZ,long)[36]0.000.001/1MPQS::~MPQS()[78]-----------------------------------------------0.008.