检测是否使用gprof工具构建了ELF二进制文件?


Answers:


10

您可以检查对函数的引用mcount(或可能_mcount__mcount根据Profiling的实现)。该功能是配置文件正常工作所必需的,而对于未分析的二进制文件则应缺少此功能。

就像是:

$ readelf -s someprog | egrep "\s(_+)?mcount\b" && echo "Profiling is on for someprog"

上面的内容在这里可以进行快速测试。


2

上面答案中的正则表达式并不总是有效...但是我认为在'readelf -s [binary]'输出中grepping“ mcount”的一般想法是正确的


0

在答案中添加更多内容:

  1. 要检查检测情况,请使用grep表示mcount / gmon:

    $  readelf -s <binary> | egrep "gmon|mcount"    
    20: 0000000000401160    63 FUNC    GLOBAL DEFAULT   12 __gmon_start__    
    28: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND mcount@GLIBC_2.2.5 (2)    
    36: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS gmon-start.c    
    39: 00000000004011a0     0 FUNC    LOCAL  DEFAULT   12 call_gmon_start    
    100: 0000000000401160    63 FUNC    GLOBAL DEFAULT   12 __gmon_start__    
    114: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND mcount@@GLIBC_2.2.5    
    
  2. 需要编译以及与-pg标志链接,否则gmon.out将不会生成。stackoverflow链接。

  3. 我发现运行gprof的二进制gmon.out文件尽管已编译/链接有-pg标志,却未生成任何 文件。原因是-我正在终止我的应用程序,这不是一个干净的出口。gprof仅在程序正常退出时才生成输出。stackoverflow链接

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.