选项-pg
,-mfentry
和-finstrument-functions
会影响.c
文件中的所有功能,
如何仅将跟踪调用插入特定功能,但不是全部?
我检查了gcc function attributes但似乎没有-pg
,-mfentry
和-finstrument-functions
的对应物可用于仅装饰到特定功能。
no_instrument_function
排除了函数,但我想要的是相反的,即包含函数。
答案 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中的函数地址,继续使用您想要跟踪的函数。
为了更友好并按功能名称而不是地址进行过滤,您可以根据符号表的数据构建哈希表。