Подтвердить что ты не робот

KCacheGrind. Показывать только функции из моего кода

Я хочу профилировать свой код. Поэтому я:

valgrind --tool=callgrind my_program [programm arguments]
kcachegrind callgrind.out.x

Теперь у меня есть окно kcachegrind:

введите описание изображения здесь

Существует множество функций ядра и библиотеки, но как я могу настроить valgrind или kcachegrind для отслеживания только функций в моем коде (что, конечно, вызывает библиотечные функции)?

Ожидаемый результат выглядит примерно так:

  time  number of calls            function_name()
  4,52%  569854          CSim2Sim  my_function1(int argc, char* argv[])
  3,52%  452158          CSim2Sim  my_function2(int argc, char* argv[])
  3,52%  36569           CSim2Sim  my_function3(int argc, char* argv[])
  1,52%  1258            CSim2Sim  my_function4(int argc, char* argv[])
4b9b3361

Ответ 1

Перейдите в меню Вид → Группировка и выберите объект ELF. В соответствующем инструменте выберите свой объект ELF приложения/библиотеки, и в нем будут отображаться только функции.

Вы не сможете получить желаемый результат. Вы не можете измерить время с помощью Valgrind, оно учитывает только инструкции и может подсчитывать количество циклов и пропуски кеша. И callgrind также не показывает полную подпись функции, она всегда будет отбрасывать аргументы и отображает только имя функции.

Ответ 2

Valgrind предоставляют возможность подавлять определенную ошибку или ошибку из определенного объектного файла или из какой-либо библиотеки. Проверьте ссылку .

В соответствии с этой инструкцией вы можете подготовить файл suppresion (например, a.supp) и передать его в Valgrind

valgrind --tool = callgrind --suppressions =/path/to/a.supp my_program [параметры программы]

Я не использую kcachegrind, но я уверен, что он должен предоставить некоторую возможность изменить параметр командной строки valgrind.

Ответ 3

Ближайшая вещь к тому, что вы ищете, вероятно, группируется. На панели инструментов: Вид → Группирование. Затем вы можете выбрать либо для исходного файла, либо для объекта ELF. Первый предоставит вам список исходных файлов, в которых вы можете выбрать файлы, которые вы написали, последний предоставит вам список объектов, в основном библиотеки и объект с именем вашего исполняемого файла: выберите его, и вы должны только просмотреть список вызовов, сделанных в исходном коде.

Ответ 4

когда вы находитесь на os x, вы можете попробовать profilingviewer, он может скрывать системные функции на основе настраиваемых пресетов.

введите описание изображения здесь