Нужно профилировать демона, написанного на C ++, gprof говорит, что нужно завершить процесс, чтобы получить gmon.out.
Это соответствует обычной практике отладки процессов демона: предоставление переключателя (например, с параметром командной строки), который заставил бы демона работать на переднем плане.
Мне интересно, у кого-нибудь есть идеи получить gmon.out с помощью ctrl-c?
Мне не известны такие варианты.
Хотя в случае gmon достаточно вызова exit()
: если вы, например, намереваетесь протестировать, скажем, обработку 100K сообщений, вы можете добавить в код счетчик, увеличенный для каждого обработанного сообщения. Когда счетчик превысит лимит, просто позвоните exit()
.
Вы также можете попробовать добавить обработчик для какого-то неиспользуемого сигнала (например, SIGUSR1 или SIGUSR2) и вызвать exit()
оттуда. Думаю, у меня нет личного опыта и я не могу быть уверен, что gmon будет работать правильно в этом случае.
Я хочу узнать горячую точку для цикла процессора
Моя обычная практика - создавать тестовое приложение, используя тот же исходный код, что и демон, но другой main()
, где я моделирую точный сценарий (часто с переключением командной строки во многих сценариях), который мне нужно отладить или протестировать. Для этого я обычно создаю статическую библиотеку, содержащую весь модуль - за исключением файла с main()
- и связываю тестовое приложение со статической библиотекой. (Это помогает поддерживать порядок в Makefiles.)
Я предпочитаю отдельное тестовое приложение для взлома внутри кода, так как особенно в случае тестирования производительности я могу иногда обходить или сокращать вызовы на дорогой ввод-вывод (или доступ к БД), который часто искажает выборку профилировщика и делает вывод бесполезным .