LibreOffice 印刷プロセスにいくつかの追加機能を実装しようとしています (すべての印刷ページのマージンに特別な情報を自動的に追加する必要があります)。LibreOffice 4.0.4 および Gnome 2.28 で RHEL 6.4 を使用しています。
私の目的は、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
4 つの出力ファイルを受け取りました。
-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
最後の 1 つ (pid 29812) は、実行中の LibreOffice Writer GUI アプリケーションに対応します (strace
および で決定しましたps aux
)。CTRL+PとOKボタンを押しました。次に、プロセスの初期化をログに出力する機能を確認することを期待して、アプリケーションを閉じました。
callgrind
出力は、この回答に従ってツールで処理されましたGprof2Dot
。残念ながら、私が興味を持っているアクションもコール グラフもそのままの状態では、画像には表示されません。
このような問題を解決する適切な方法についての情報をいただければ幸いです。ありがとうございました。