Как напечатать функцию определения размера malloc с помощью зонда perf - PullRequest
0 голосов
/ 23 мая 2018

Я хочу отследить мою программу, чтобы понять распределение памяти моей программы.Идея состоит в том, что всякий раз, когда вызывается 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 голосов
/ 10 октября 2018

Просто возьмите аргумент из регистра 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'
...