相关疑难解决方法(0)

如何在程序中找到符号来查找符号

使用时perf report,我没有看到我的程序的任何符号,而是我得到这样的输出:

$ perf record /path/to/racket ints.rkt 10000
$ perf report --stdio

# Overhead   Command      Shared Object  Symbol
# ........  ........  .................  ......
#
    70.06%  ints.rkt  [unknown]          [.] 0x5f99b8        
    26.28%  ints.rkt  [kernel.kallsyms]  [k] 0xffffffff8103d0ca
     3.66%  ints.rkt  perf-32046.map     [.] 0x7f1d9be46650  
Run Code Online (Sandbox Code Playgroud)

这是相当缺乏信息的.

相关程序使用调试符号构建,sysprof工具显示相应的符号,Zoom也是如此,我认为它是perf在引擎盖下使用的.

请注意,这是在x86-64上,因此二进制文件是使用编译的-fomit-frame-pointer,但在其他工具下运行时也是这种情况.

linux performance perf

25
推荐指数
3
解决办法
3万
查看次数

损坏的符号链接和神秘的(已删除)

我一直在用 linux 上的 proc 文件系统做一些事情,我遇到了一些我想澄清的行为。

每个进程/proc都有一个指向它的可执行文件的符号链接,/proc/{pid}/exe. 如果一个进程在其可执行文件被删除后继续运行,读取此符号链接将返回可执行文件的路径,(deleted)并附加到末尾。

运行此命令,您甚至可能会在系统上看到一些:

grep '(deleted)' <(for dir in $(ls /proc | grep -E '^[0-9]+'); do echo "$dir $(readlink /proc/$dir/exe)"; done)
Run Code Online (Sandbox Code Playgroud)

我尝试使用一些简单的 bash 命令重新创建此行为:

>>> echo "temporary file" >> tmpfile.test
>>> ln -s tmpfile.test tmpfile.link
>>> rm tmpfile.test
>>> readlink tmpfile.link
tmpfile.test
Run Code Online (Sandbox Code Playgroud)

没有(deleted)附加到名称!尝试cat tmpfile.link确认链接已断开 ( cat: tmpfile.link: No such file or directory)。

然而,前几天,同样的测试确实导致了一个(deleted)被附加到 readlink 的输出。是什么赋予了?

这是我想知道的:

  • 是否有一系列事件保证(deleted)将附加到名称?
  • 为什么/proc/{pid}/exe显示(deleted) …

linux bash symlink procfs

5
推荐指数
2
解决办法
2275
查看次数

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

您可能已经阅读过这个问题: 如何在我的程序中获得性能以查找符号

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
Run Code Online (Sandbox Code Playgroud)

也就是说: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; …
Run Code Online (Sandbox Code Playgroud)

linux performance perf

4
推荐指数
1
解决办法
6235
查看次数

标签 统计

linux ×3

perf ×2

performance ×2

bash ×1

procfs ×1

symlink ×1