Почему KCacheGrind не показывает имена моих функций? - PullRequest
2 голосов
/ 04 мая 2019

Я пытаюсь использовать kcachegrind для генерации графа вызовов, желательно с четким указанием того, какие блоки в графе вызовов соответствуют моим функциям.Я последовал этот ответ как тестовый прогон и получил другой вывод.Я не понимаю, что мне нужно сделать, чтобы повторить результаты этого примера. Как заставить kcachegrind отображать имена моих функций на графике вызовов?

Для удобства вот точный код, который я использовал:

int f2(int i) { return i + 2; }
int f1(int i) { return f2(2) + i + 1; }
int f0(int i) { return f1(1) + f2(2); }
int pointed(int i) { return i; }
int not_called(int i) { return 0; }

int main(int argc, char **argv) {
    int (*f)(int);
    f0(1);
    f1(1);
    f = pointed;
    if (argc == 1)
        f(1);
    if (argc == 2)
        not_called(1);
    return 0;
}

Этот файл (main.c) был скомпилирован так:

gcc -ggdb3 -O0 -std=c99 main.c -o main

и затем я вызвал valgrind:

valgrind --tool=callgrind ./main

, который выдает следующее:

==4770== Callgrind, a call-graph generating cache profiler
==4770== Copyright (C) 2002-2017, and GNU GPL'd, by Josef Weidendorfer et al.
==4770== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==4770== Command: ./main
==4770== 
==4770== For interactive control, run 'callgrind_control -h'.
==4770== 
==4770== Events    : Ir
==4770== Collected : 121502
==4770== 
==4770== I   refs:      121,502

наконец, язапустил kcachegrind с выходным файлом (callgrind.out.4789):

kcachegrind callgrind.out.4789

Из примера, который я использовал, я ожидал, что график вызовов будет выглядеть следующим образом:

The Expected Graph Output

Вместо этого я получил что-то похожее на это:

The Actual Graph Output

Что я могу сделать, чтобы раскрыть имена своих функцийна графике звонков?

1 Ответ

0 голосов
/ 04 мая 2019

Согласно комментарию @ user6556709, загрузчик и динамическое связывание - это то, что показано на моем графике выше.Приведенный пример не указывает, как найти ваш основной, но его можно найти в разделе «Плоский профиль» GUI:

Digging for programs

Itпотребовалось некоторое копание, чтобы найти - его можно сгруппировать по источникам, чтобы показывать только файлы .c / .h, или использовать заголовок Location для сортировки по названию местоположения и поиска по основному.

...