GNU 对 C 程序的行级分析

Posted

技术标签:

【中文标题】GNU 对 C 程序的行级分析【英文标题】:Line level profiling of a C program by GNU 【发布时间】:2014-09-29 18:03:55 【问题描述】:

谁能告诉我如何使用 GNU 分析器分析 C 语言程序的单行或代码块? 我使用了gprof ./a.out gmon.out,它为我提供了平面轮廓和调用图。但是,我希望看到更频繁访问的行。

谢谢,

【问题讨论】:

将这些行提取到自己的函数中? “功能 B 的动作 A 是否花费了太长时间”的想法让我认为动作 A 首先应该是它自己的功能。 这似乎是一个答案:***.com/questions/3263573/… 【参考方案1】:

这可能是你不知道你应该用谷歌搜索的术语的事情之一,所以我会回答它:

您要查找的术语是“注解”——您想对源代码进行注解并逐行查看代码中的命中。

使用 -A 标志调用 gprof 将转储每行捕获的样本。

另见:

https://sourceware.org/binutils/docs/gprof/Annotated-Source.html

【讨论】:

但它不会按行为您提供包容性百分比。 (如果一行是一个大而慢的函数调用,它不会看到它。)它也不会给你挂钟时间。 (它对 I/O 视而不见。) 谢谢,我在这里找到了答案gcc.gnu.org/onlinedocs/gcc/Invoking-Gcov.html :)【参考方案2】:

好的,我会发布这个答案,所以如果像我这样的新手搜索它可以更快地找到它:) 步骤如下:source

    gcc -fprofile-arcs -ftest-coverage fourcefile.c (在编译文件结束时会生成 *.gcno) 运行可执行文件。 运行 gcov:gcov sourcefile.c (在运行结束时,将生成一个文件 (*.gcov),其中包含所有必需的信息)

【讨论】:

以上是关于GNU 对 C 程序的行级分析的主要内容,如果未能解决你的问题,请参考以下文章

mysql 啥时候开启行级锁

oracle大量的行级锁对数据库整体性能有影响吗?

POSTGRESQL中的行级锁及ODOO中的应用

Ubuntu Box上的应用程序分析[关闭]

如何实现对亚马逊 Redshift 的原始 sql 访问的行级安全性 (RLS)?

oracle行级锁和表级锁的区别?