Опитвам се да внедря някаква допълнителна функционалност към процеса на печат на LibreOffice (някаква специална информация трябва да се добавя автоматично към полетата на всяка отпечатана страница). Използвам RHEL 6.4 с LibreOffice 4.0.4 и Gnome 2.28.
Моята цел е да проуча потока от данни между LibreOffice и системните компоненти и да определя кои изходни кодове са отговорни за отпечатването. След това ще трябва да променя тези части от кода.
Сега имам нужда от съвет относно методите за изследване на изходния код. Намерих много инструменти и от моя гледна точка:
strace
изглеждат на много ниско ниво;gprof
изисква двоични файлове, прекомпилирани с "-pg" CFLAGS; нямате представа как да го направите с 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) съответства на работещото GUI приложение LibreOffice Writer (определих го с strace
и ps aux
). Натиснах CTRL+P и бутона OK. След това затворих приложението с надеждата да видя функцията, отговорна за инициализацията на процеса на печат в регистрационните файлове.
Изходът callgrind
беше обработен с инструмент Gprof2Dot
според този отговор. За съжаление, не мога да видя на снимката нито действията, които ме интересуват, нито графиката на обажданията, както е.
Ще съм благодарен за всякаква информация относно правилния начин за разрешаване на такъв проблем. Благодаря ти.