Я пытаюсь профилировать простую программу C с perf-событиями на debian 8 jessie. Я вижу символы, но не могу получить трассировку стека. Та же процедура генерирует хорошие трассировки стека в Ubuntu 16.04.
Я установил linux-image-amd64-dbg
и libc6-dbg
. Я подтвердил, что параметры конфигурации ядра включают CONFIG_KALLSYMS=y
Я скомпилировал программу с gcc -g3 -O0 hello.c
, чтобы включить символы отладки.
Я начинаю профилирование с помощью следующей команды. sudo perf record -g ./a.out
Я генерирую пламенный график Flame Graph с помощью следующей команды
sudo perf script | ~/code/FlameGraph/stackcollapse-perf.pl | \
~/code/FlameGraph/flamegraph.pl > perf-kernel.svg
Это список для hello.c, который я пытаюсь профилировать.
#include <stdio.h>
#include <unistd.h>
void do2() {
FILE* f = fopen("/dev/zero", "r");
int fd = fileno(f);
char buf[100];
while(1) {
read(fd, buf, sizeof(buf)/sizeof(buf[0]));
}
}
int main(void)
{
do2();
return 0;
}
Это график пламени с Debian Jessie
Почему в Debian Jessie отсутствуют трассировки стека?
Спасибо, Шарат.