如何使用perf探针打印malloc size函数

时间:2018-05-23 13:08:30

标签: tracing perf

我想跟踪我的程序以了解我的程序的内存分配。这个想法是每当调用malloc时,它会打印出分配了size的调用堆栈。 这是我用来创建事件的命令:

perf probe -x /lib64/libc.so.6 'malloc allocated=-8(%bp):u64'

但是perf report告诉我此事件的allocated内存不正确。我怎样才能解决这个问题。

我认为问题被size-8(%bp))偏移是不正确的。但我不知道asm所以我无法理解libc二进制文件。

更新:使用简单的程序,例如:

for (int i=0; i<10; i++)
    malloc(i);

然后,如果我使用O0编译,我可以看到结果是正确的。使用O3编译时的结果不正确。用我的大程序(十万行代码),用O0编译,但它不能给我正确的结果。

1 个答案:

答案 0 :(得分:2)

只需从rdi寄存器中获取参数,而不要查看框架?

perf probe -x /lib64/libc.so.6 'malloc allocated=%di:u64'

在X86上,改为使用eax注册:

perf probe -x /lib/i386-linux-gnu/libc.so.6 'malloc allocated=%ax:u32'