3

backtrace10ミリ秒ごとにプロセスのスタック(スタック)を保存するgdbのスクリプトを作成したいと思います。これどうやってするの?

これは、「無一文」のコールグラフプロファイリングのようなものです(高度なプロファイラーを使用できない人向け)。

はい、多くの高度なプロファイラーがあります。一般的なCPUおよび一般的なOS用。Sharkは非常に印象的で使いやすいですが、gdbを使用して、このようなスクリプトで基本的な機能を取得したいと思います。

4

3 に答える 3

3

lsstackを入手できますか?おそらく、アプリの外部のスクリプトからそれを実行できます。なぜ10ms?100ms以上でもパーセンテージはほぼ同じになります。アプリが速すぎる場合は、外側のループを使用して人為的に速度を落とすことができますが、それでもパーセンテージは変わりません。さらに言えば、アプリが十分に長く実行され、パフォーマンスの問題がどこにあるかを見つけることが目標である場合は、Ctrl-Cを使用してgdbでサンプルを手動で取得できます。

于 2010-03-25T14:51:25.927 に答える
0
cat > gdb.run
set pagination 0 
backtrace 
continue 
backtrace 
continue 
... as many more backtrace + continue's as needed
backtrace 
continue 
detach 
quit

もちろん、重複する改行は省略してください。このフォーラム ソフトウェアで単一の改行をどのように行うのですか? :(

gdb -x gdb.run -p $pid

次に、doを使用します

kill -INT $pid ; sleep 0.01

別のスクリプトのループで。

kill -INTを押したときにOSが行うことですctrl-C。読者のための演習: gdb スクリプトが $n 回の繰り返しでループを使用するようにします。

于 2010-06-02T09:14:30.457 に答える