gcc:如何只追踪特定的函数调用

时间:2014-08-18 09:44:41

标签: c gcc

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

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

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

2 个答案:

答案 0 :(得分:0)

您可以使用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

答案 1 :(得分:0)

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

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