finstrument-functions-exclude-function-list似乎无法正确处理逗号

时间:2019-06-07 12:55:04

标签: c++ gcc compilation instrumentation

尝试使用finstrument-functions进行编译并排除具有多个模板参数的模板函数,使用\方法转义逗号(如对exclude-file-list here所述)无法正确禁用对传递的函数的检测

使用的GCC命令:

gcc -finstrument-functions -finstrument-functions-exclude-function-list='test<float\, int>' main.cpp -o a.out -O0

上面创建了一个带有“测试”功能的二进制文件。程序集摘要和下面包含的main.cpp文件

gcc -dumpversion返回“ 6.2.0”,以上命令在Red Hat Enterprise Linux 7.4版上运行

main.cpp的内容:

template<class T, class U>
T test(int a, T b){
    int res = 0;
    for(int i = 0; i < 1000; i++){
        res += i;
    }
    return(res);
}

int main(int argc, char** argv){
    float a = test<float, int>(argc, 1.0);
    return(0);
}

“测试”功能的转储输出:

000000000040059f <float test<float, int>(int, float)>:
  40059f:   55                      push   %rbp
  4005a0:   48 89 e5                mov    %rsp,%rbp
  4005a3:   48 83 ec 20             sub    $0x20,%rsp
  4005a7:   89 7d ec                mov    %edi,-0x14(%rbp)
  4005aa:   f3 0f 11 45 e8          movss  %xmm0,-0x18(%rbp)
  4005af:   48 8b 45 08             mov    0x8(%rbp),%rax
  4005b3:   48 89 c6                mov    %rax,%rsi
  4005b6:   bf 9f 05 40 00          mov    $0x40059f,%edi
  4005bb:   e8 70 fe ff ff          callq  400430 <__cyg_profile_func_enter@plt>
  4005c0:   c7 45 f8 00 00 00 00    movl   $0x0,-0x8(%rbp)
  4005c7:   c7 45 fc 00 00 00 00    movl   $0x0,-0x4(%rbp)
  4005ce:   81 7d fc e7 03 00 00    cmpl   $0x3e7,-0x4(%rbp)
  4005d5:   7f 11                   jg     4005e8 <float test<float, int>(int, float)+0x49>
  4005d7:   8b 55 f8                mov    -0x8(%rbp),%edx
  4005da:   8b 45 fc                mov    -0x4(%rbp),%eax
  4005dd:   01 d0                   add    %edx,%eax
  4005df:   89 45 f8                mov    %eax,-0x8(%rbp)
  4005e2:   83 45 fc 01             addl   $0x1,-0x4(%rbp)
  4005e6:   eb e6                   jmp    4005ce <float test<float, int>(int, float)+0x2f>
  4005e8:   8b 45 f8                mov    -0x8(%rbp),%eax
  4005eb:   66 0f ef c9             pxor   %xmm1,%xmm1
  4005ef:   f3 0f 2a c8             cvtsi2ss %eax,%xmm1
  4005f3:   f3 0f 11 4d e4          movss  %xmm1,-0x1c(%rbp)
  4005f8:   48 8b 45 08             mov    0x8(%rbp),%rax
  4005fc:   48 89 c6                mov    %rax,%rsi
  4005ff:   bf 9f 05 40 00          mov    $0x40059f,%edi
  400604:   e8 17 fe ff ff          callq  400420 <__cyg_profile_func_exit@plt>
  400609:   f3 0f 10 45 e4          movss  -0x1c(%rbp),%xmm0
  40060e:   c9                      leaveq 
  40060f:   c3                      retq

我希望测试功能不被使用,但是可以。有人知道为什么吗?

Compiler explorer example

1 个答案:

答案 0 :(得分:0)

以防万一有人通过这种方式出现,这个和finstrument-functions-exclude-function-list不尊重函数的名称空间部分都是错误,我已针对这两个问题提出了要求。希望很快会实施修复程序(当前正在开发中)。

Namespace / class mishandling

Comma mishandling