【问题标题】:gcc: how to only trace specific functions callsgcc:如何只跟踪特定的函数调用
【发布时间】:2014-10-11 04:39:11
【问题描述】:

选项-pg-mfentry-finstrument-functions 影响.c 文件中的所有函数, 如何仅将跟踪调用插入特定函数,而不是全部?

我检查了gcc function attributes,但似乎没有可用于装饰特定功能的-pg-mfentry-finstrument-functions 的对应物。

no_instrument_function 排除函数,但我想要的是相反的,即包含函数。

【问题讨论】:

  • 您可以使用您的 MELT 扩展来自定义 GCC。

标签: c gcc


【解决方案1】:

您可以使用C 中的Backtraces 来做到这一点。但是使用这种方法,您必须在要跟踪的函数中添加一些代码。

这是一个简单的例子:

 #include <execinfo.h>
 #include <stdio.h>
 #include <stdlib.h>

 /* Obtain a backtrace and print it to stdout. */

 void print_trace (void)
 {
   void *array[10];
   size_t size;
   char **strings;
   size_t i;

   size = backtrace (array, 10);
   strings = backtrace_symbols (array, size);
   printf ("Obtained %zd stack frames.\n", size);

   for (i = 0; i < size; i++)
      printf ("%s\n", strings[i]);
   free (strings);
 }

 /* A dummy function to make the backtrace more interesting. */

 void dummy_function (void)
 {
   print_trace ();
 }


 int main (void)
 {
   dummy_function ();
   return 0;
 }

在编译时将-g -rdynamic 标志添加到链接器:

 gcc -g -rdynamic example.c -o example

【讨论】:

    【解决方案2】:

    使用-finstrument-functions,您可以过滤 __cyg_profile_func_enter 和 __cyg_profile_func_exit 中的函数地址,以便仅使用您要跟踪的函数。

    为了更加友好并按函数名称而不是地址进行过滤,您可以根据符号表的数据构建一个哈希表。

    【讨论】:

      猜你喜欢
      • 2018-04-20
      • 2016-11-30
      • 2010-09-26
      • 2012-12-07
      • 2023-01-22
      • 2018-10-26
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      相关资源
      最近更新 更多