gpt4 book ai didi

gcc - 为什么 `-finstrument-functions` 对我不起作用?

转载 作者:行者123 更新时间:2023-12-03 17:03:31 25 4
gpt4 key购买 nike

根据 this answer ,它应该打印所有函数名称:

[root@ test]# cat hw.c
#include <stdio.h>

int func(void)
{
return 1;
}
int main(void)
{
func();
printf("%d",6);
return 6;
}
[root@ test]# gcc -Wall hw.c -o hw -finstrument-functions
[root@ test]# ./hw
6
[root@ test]# gcc --version
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48)
Copyright (C) 2006 Free Software Foundation, Inc.

但为什么它对我不起作用?

最佳答案

这是来自 gcc 手册:

-finstrument-functions

Generate instrumentation calls for entry and exit to functions. Just after func- tion entry and just before function exit, the following profiling functions will be called with the address of the current function and its call site. (On some platforms, __builtin_return_address does not work beyond the current func- tion, so the call site information may not be available to the profiling functions otherwise.)

void __cyg_profile_func_enter (void *this_fn, void *call_site);

void __cyg_profile_func_exit (void *this_fn, void *call_site);



除非某些东西实现了这些功能,否则您将收到链接器错误(MinGW 会发生这种情况)。可以想象,您的 GCC 版本提供了空的实现。

我通过提供这个实现让它与 MinGW GCC 一起工作:
#include  <stdio.h>

void __cyg_profile_func_enter (void *this_fn, void *call_site) {
printf( "entering %p\n", this_fn );
}

void __cyg_profile_func_exit (void *this_fn, void *call_site) {
printf( "leaving %p\n", this_fn );
}

但这仅给出了函数地址。我原以为应该有一个 GCC 默认实现,但似乎没有。

人们可能还对 this visualisation of the call tree 感兴趣,它使用 -fintrument-functions 标志 - 警告,我自己没有尝试过。

关于gcc - 为什么 `-finstrument-functions` 对我不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6176284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com