我想跟踪我的程序以了解我的程序的内存分配。这个想法是每当调用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
编译,但它不能给我正确的结果。
答案 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'