Я хочу профилировать мой код. Итак, я делаю:
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[])
Перейдите в View -> Grouping и выберите ELF Object. В соответствующем окне инструментов выберите объект ELF приложения / библиотеки, и он покажет только функции внутри них.
Вы не сможете получить желаемый результат, хотя. Вы не можете измерить время с помощью Valgrind, он только считает инструкции и может оценить количество циклов и пропуски кэша. И callgrind также не показывает полную сигнатуру функции, он всегда отбрасывает аргументы и отображает только имя функции.
Valgrind
предоставить средство для подавления конкретной ошибки или ошибки из определенного объектного файла или из некоторой библиотеки. Проверь это ссылка на сайт.
Согласно этой инструкции вы можете подготовить файл поддержки (например, a.supp) и передать его valgrind
valgrind —tool = callgrind —suppressions = / path / to / a.supp my_program [аргументы программы]
Я не использовал kcachegrind, но я уверен, что он должен предоставить некоторые возможности для изменения параметра командной строки valgrind.
Самая близкая вещь к тому, что вы ищете, это, вероятно, группировка. На панели инструментов: Вид -> Группировка. Затем вы можете выбрать либо для исходного файла или для ELF-объекта. Первый даст вам список исходных файлов, где вы можете выбрать файлы, которые вы написали, второй даст вам список объектов, в основном, библиотек и объекта с именем вашего исполняемого файла: выберите его, и вы должны только просматривать список звонков, сделанных в вашем исходном коде.
когда вы находитесь на OS X вы можете попробовать profilingviewer, он может скрывать системные функции на основе настраиваемых пресетов.