linux - perf 可以在内核中找到符号,但在我的程序中找不到符号。如何解决?

标签 linux performance perf

你可能已经读过这个问题: how can i get perf to find symbols in my program

1)我的问题是:

当我使用 perf report 时,它给出了这样的结果:

    # Overhead  Command      Shared Object                    Symbol
    #   .  .  
    #
        99.59%     test  test               [.] 0x000003d4          
         0.21%     test  [kernel.kallsyms]  [k] __do_fault          
         0.10%     test  [kernel.kallsyms]  [k] run_timer_softirq   
         0.10%     test  [kernel.kallsyms]  [k] __update_cpu_load   
         0.01%     test  [kernel.kallsyms]  [k] set_task_comm       
         0.00%     test  [kernel.kallsyms]  [k] intel_pmu_enable_all

即:perf 可以在内核中找到符号,但在我的程序中找不到符号。

我的程序在这里:

     void longa() 
      { 
         int i,j; 
         for(i = 0; i < 1000000; i++) 
        j=i; //am I silly or crazy? I feel boring and desperate. 
      } 


     void foo2() 
     { 
       int i; 
       for(i=0 ; i < 10; i++) 
        longa(); 
     } 

     void foo1() 
     { 
       int i; 
       for(i = 0; i< 100; i++) 
          longa(); 
     } 

    int main(void) 
     { 
       foo1(); 
       foo2(); 
     } 

2)我已经编译了程序:

gcc 测试.c -g -o 测试

我的环境:os:ubuntu kernel:3.10.9

最佳答案

今天,当我运行 perf test 时,我收到一条消息说 vmlinux symtab matches kallsyms: Failed

我在查找原因的时候发现原因是/proc/sys/kernel/kptr_restrict的值为1,当我们设置为0,我们将在我们的程序中获取符号。

关于linux - perf 可以在内核中找到符号,但在我的程序中找不到符号。如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18504690/

相关文章:

arrays - 我们可以使用二分搜索来查找排序数组中最常出现的整数吗?

android - 有没有办法使用 Android 模拟器和 'geo fix' 传递当前速度数据以及纬度和经度?

c - 使用 mmap 和/proc/mtrr 访问不可缓存区域

c++ - Linux perf 不解析符号

sql - sqlite3的最大表数

linux - 如何将选项传递给挂载系统调用?

linux - 从 Docker 运行 msi。应该选择哪个主机操作系统

linux - 如何从命令行批量将图像大小调整为最大 2MB?

performance - Haskell 性能调整

linux - perf record -c 选项和溢出事件之间的关系是什么?