web-dev-qa-db-ja.com

gdb:ループ実行中に一時停止するにはどうすればよいですか?

IDEとしてNetBeans 7を使用して、Windows 7のmingw32の下でg ++でソフトウェアレンダラーを作成しています。

私は最近それをプロファイリングする必要がありました、そして、この必要性は私が過去に構造を敷き詰めた今、クリティカルマスに達しました。私は周りを見回したが、私にとっては この答え は、クロスプラットフォームでありながら物事をシンプルに保つことにおいて最も期待できることを示している。

そのアプローチの要点は、おそらく最も基本的な(そして多くの点で最も正確な)プロファイル/最適化の方法は、時々スタックを直接サンプリングし、実行を停止することです...残念ながら、NetBeans一時停止しません。だから、gdbでこのサンプリングを直接行う方法を見つけようとしています。

私はgdbについてあまり知りません。ただし、manページからわかることは、実行可能ファイルを実行する前にブレークポイントを設定することですbefore。それは私を助けません。

誰もがgdb(または他のgnuツール)を取得するための簡単なアプローチを知っていますか:

  1. Isay soのときにスタックをサンプリングする(望ましい)
  2. 一定の期間にわたってランダムな間隔でサンプル全体を取得します

...指定した構成を提供しますか?

32
Engineer

Gdbで実行可能ファイルを実行し、^ C(Ctrl+C)いつ中断したいですか?これでgdbのプロンプトが表示され、whereコマンドを実行して現在の場所を確認し、continueで実行を続行できます。

関係のないスレッド(たとえば、ループしているUIスレッド)にいる場合は、threadinfo threadsおよびthread nで正しいものに移動し、whereを実行します。

57
unwind