Я пытаюсь реализовать некоторые дополнительные функции в процессе печати LibreOffice (некоторая специальная информация должна автоматически добавляться на поля каждой печатной страницы). Я использую RHEL 6.4 с LibreOffice 4.0.4 и Gnome 2.28.
Моя цель — исследовать поток данных между LibreOffice и системными компонентами и определить, какие исходные коды отвечают за печать. После этого мне придется изменить эти части кода.
Теперь мне нужен совет по методам исследования исходного кода. Я нашел множество инструментов и с моей точки зрения:
strace
кажутся очень низкоуровневыми;gprof
требует перекомпиляции двоичных файлов с параметром CFLAGS "-pg"; понятия не имею, как это сделать с LibreOffice;systemtap
может проверять только системные вызовы, не так ли?callgrind
+Gprof2Dot
неплохо сочетаются, но дают странные результаты (см. ниже);
Например, вот график вызовов из вывода callgrind
с визуализацией Gprof2Dot
. Я запускал callgrind
такой командой:
valgrind --tool=callgrind --dump-instr=yes --simulate-cache=yes --collect-jumps=yes /usr/lib64/libreoffice/program/soffice --writer
и получил четыре выходных файла:
-rw-------. 1 root root 0 Jan 9 21:04 callgrind.out.29808
-rw-------. 1 root root 427196 Jan 9 21:04 callgrind.out.29809
-rw-------. 1 root root 482134 Jan 9 21:04 callgrind.out.29811
-rw-------. 1 root root 521713 Jan 9 21:04 callgrind.out.29812
Последний (pid 29812) соответствует работающему приложению с графическим интерфейсом LibreOffice Writer (я определил его с помощью strace
и ps aux
). Я нажал CTRL+P и кнопку OK. Затем я закрыл приложение в надежде увидеть в логах функцию, отвечающую за инициализацию процесса печати.
Вывод callgrind
был обработан инструментом Gprof2Dot
в соответствии с этим ответом. К сожалению, я не вижу на картинке ни интересующих меня действий, ни графа вызовов как есть.
Буду признателен за любую информацию о правильном способе решения такой проблемы. Спасибо.