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[])
Ответы
Ответ 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, он может скрывать системные функции на основе настраиваемых пресетов.
![введите описание изображения здесь]()