你可能读过这个问题:我怎样才能在程序中找到符号 https://stackoverflow.com/questions/10933408/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 test.c -g -o 测试
My env: 操作系统:ubuntu 内核:3.10.9
今天,当我跑步时perf test
,我收到一条消息说vmlinux symtab matches kallsyms: Failed
.
当我寻找原因时,我发现原因是/proc/sys/kernel/kptr_restrict
是1。当我们将其设置为0
,我们将在程序中得到该符号。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)