我想跟踪我的程序以了解程序的内存分配。这个想法是每当调用 malloc 时,它都会打印出带有 allocate 的调用堆栈size。这是我用来创建事件的命令:
perf probe -x /lib64/libc.so.6 'malloc allocated=-8(%bp):u64'
Run Code Online (Sandbox Code Playgroud)
但perf report要告诉我allocated这件事的记忆是不正确的。我怎样才能解决这个问题。
我认为这个问题偏移到size(-8(%bp))是不正确的。但我不知道 asm 所以我无法理解 libc 二进制文件。
更新:使用简单的程序,例如:
for (int i=0; i<10; i++)
malloc(i);
Run Code Online (Sandbox Code Playgroud)
然后我可以看到如果我用 编译的话结果是正确的O0。我编译的结果O3不正确。并用我的大程序(数十万行代码)进行编译,O0但它不能给我正确的结果。
只从寄存器中获取参数rdi而不是查看框架?
perf probe -x /lib64/libc.so.6 'malloc allocated=%di:u64'
Run Code Online (Sandbox Code Playgroud)
在 X86 上,请eax改用寄存器:
perf probe -x /lib/i386-linux-gnu/libc.so.6 'malloc allocated=%ax:u32'
Run Code Online (Sandbox Code Playgroud)