2017-05-11 1 views
2

GDBのpython APIを使用して自分のGDB prettyプリンタを改良しようとしています。プロファイルQt5のGDB python prettyプリンタ

現在、私はそれらをコアでテストしています。

私はいくつかのQMap、QListコンテンツの情報を取得しようとしていますが、コンテンツを印刷する要素が非常に遅い(分)です。

私は、どの部品がより遅いかをプロファイルする既知の方法があるかどうかを知りたいと思います。

私はすでにPython profile manualgoogle-perftoolsをチェックしましたが、GDB実行サイクルでどのように使用するかわかりません。

gdbcommands.txt:load-qt5-printers.py content

source /home/user/codigo/git/kde-dev-scripts/gdb/load-qt5printers.py 
source /home/user/codigo/myownprinters.py 
core ../../core.QThread.1493215378 
bt 
p longQMapofQList 

がリンク:

その後、私は自動的にそれらのコマンドを実行するためにgdbを起動します。

gdb-multiarch --command=~/bin/gdbcommands.txt 

答えて

1

彼らはそれらを印刷するので、多くの要素を持っています内容はとても遅いです(分)。

Qt pretty-printersはprint-elementsの制限を受けますか?あなたの限界は高すぎますか?

1000個の要素を含むリストを印刷している場合、GDBは10,000回以上の呼び出しを実行する必要があり、これらの呼び出しを待っている時間はすべてあります。

strace -cの下でgdbを実行して、10個の要素と100個の要素のリストを印刷するときに実行されるptraceの数を確認できます。

増加が直線的である場合は、かなりのプリンタを最適化してアクセス回数を減らすことができます。増加が二次的である場合、かなりのプリンタは不要なポインタ追跡を行う可能性があります(長いリストの印刷には数分かかる理由が分かります)。

+0

印刷制限を無効にしました。印刷制限をすべて印刷したいからです。だからこそ私は、より遅い部品の輪郭を描くのに助けを求める。そして、それはコアファイルです、私が知る限り、ptraceはここでは使用されません。ご回答有難うございます。 – kikeenrique

+0

@kikeenrique https://cgit.kde.org/kde-dev-scripts.git/tree/gdbからQT pretty-printersを使用すると仮定すると、0.13sのコアダンプからQList を1000要素で印刷できます。あなたのリストはどれくらい大きいですか? –

関連する問題