「デバッグ」ビューの使用

「デバッグ」ビューを使用すると、プログラムのデバッグを管理することができます。 このビューには、デバッグするターゲットごとの中断スレッドのスタックが表示されます。 デバッグする各プログラムまたはアプリケーションのデバッグ・ターゲット (スレッドおよびスタック・フレームと関連付けられています) が、 「デバッグ」ビューに表示されます。

このタスクについて

「デバッグ」ビューにおける典型的なターゲットは、次の図のように 表されます。

「デバッグ」ビュー

「デバッグ」ビューでは、プログラムのデバッグ・セッションを開始 するために使用される起動が、最上位のノード・レベルに 表示されます (図のポインター A.)。起動のすぐ下に、デバッグ・エンジンを 表すノードが表示されます (図のポインター B.)。その次に、プログラム内の各 スレッドが表示されます (図のポインター C.)。プログラム実行が停止すると、デフォルトでは、 停止するスレッドのノードが自動的に展開され、そのスタック・フレームが 表示されます (図のポインター D.)。他のスレッドを手動で展開すると、それらのスレッドは 次回にプログラムが中断したときに自動的に展開されます。最後に、デバッグされるプロセスおよび プログラムを表すノードが表示されます (図のポインター E.)。

注:
  • 単一スレッドのアプリケーション (libpthreads.a なしでビルドされたアプリケーション) の場合、 「デバッグ」ビューに表示されるスレッド ID は、 常にカーネル・スレッド ID です。通常、これは大きな番号です。
  • マルチスレッドのアプリケーション (libpthreads.a を用いてビルドされたアプリケーション) の場合、 「デバッグ」ビューに表示されるスレッド ID は、pthread ID です。 通常、これらは小さな番号です。非常に大きな値のスレッド ID は、 現在 pthread と関連付けられていないカーネル・スレッドを示します。 通常、これが発生するのは、非同期シグナル (例えば、SIGSTOP) をアプリケーションが 受け取った場合です。シグナルが処理されると、これらのスレッドは表示 されなくなります。
  • マルチスレッド・プロセスで fork() の呼び出し後に子プロセスを 追跡することを選択した場合、デバッガーは、子プロセス内に存在する単一のカーネル・スレッドのみ をデバッグします。このスレッドの ID は、 カーネル・スレッドの ID です。

プログラム実行が中断すると、選択したスタック・フレームのソースがエディターで表示されて、プログラムでこれから実行するソース行が強調表示されます。プログラム内に 多数のスレッドがある場合、停止を引き起こしたスレッドのスタックが、デバッグ・フレームの最後から スクロールオフすることがあります。

「デバッグ」ビューは、 デバッガー・デーモンを設定するためにも使用できます。これについて詳しくは、 デバッグ・エンジンの listen に関する関連トピックを参照してください。

実行、終了、および切り離し

このタスクについて

「デバッグ」ビューで、以下の基本的なデバッグ・アクションを実行できます。

  • アプリケーションを実行するには、「再開」ボタン (「再開」アイコン) をクリックするか、F8 を押します。
  • デバッグ・セッションを終了するには、「終了」(「終了」アイコン) を クリックするか、Shift+F8 を押します。あるいは、終了するデバッグ・ターゲット (または、そのスレッドまたはスタックの 1 つ) を右クリックし、 終了アクションのうちの 1 つを選択します。
  • プログラムから切り離し、プログラムをそのまま実行するには、「切断」(「切断」アイコン) をクリックします。このアクションは、 デバッグしているプログラムがどのように開始されたかによって、使用不可の場合があります。

実行の一時停止

このタスクについて

デバッグしているアプリケーションが実行中の場合は、「中断」アクション (「中断」アイコン)(Ctrl+F8) を使用して、そのアプリケーション (またはその中の個々のスレッド) を一時停止できます。 このアクションの使用時にプロセスを選択すると、プロセスのすべてのスレッドが停止します。デバッグ・エンジンで、個々のスレッドの中断と再開がサポートされる場合は、スレッドを選択すると、そのスレッドのみが停止します。このサポートは、バージョン 11.1 以降のデバッグ・エンジンを使用している場合にのみ使用可能です。 アプリケーション内のスレッドは、「再開」アクションを発行するまで中断されます。 中断アクションを発行すると、 デバッグ・エンジンは、デバッグしているプログラムに SIGSTOP を 送信します。

中断は、実行しているが、ブレークポイントがヒットしないような、暴走 プロセス の場合に役立ちます。アプリケーションを中断することによって、 そのアプリケーションの制御を取り戻すことができます。プログラムを中断すると、そのプログラムはエディターの 「逆アセンブル」ビューで停止するのが普通です。

プログラムのステップスルー

このタスクについて

スレッドが中断されている場合は、ステップ関連のコントロールを使用して、プログラムの実行を 1 行ずつ ステップスルーできます。ステップ・オペレーション中にブレークポイントまたはイベントが 検出されると、実行はブレークポイントまたはイベントで中断し、ステップ・オペレーションは終了します。 ステップ・コマンドを使用すると、プログラムを一度に 1 命令または 1 ロケーションごとにステップスルーできます。

以下のステップ・コマンドを使用できます。

  • ステップオーバー (「ステップオーバー」アイコン)(F6): ステップオーバーを発行すると、 プログラムは次のソース行に進みます。
  • ステップイン (「ステップイン」アイコン)(F5): ステップインを発行すると、 プログラムは次のステートメントに進みます。現在行が別の関数の呼び出しを含んでいる場合、 デバッガーは、その関数で停止します。

    このコマンドの動作には、 「ステップ・フィルターの使用」アクション (「ステップ・フィルター/ステップ・デバッグの使用」アイコン)(Shift+F5) が影響します。フィルターが オフ (ボタンが選択されていない) の場合、デバッガーは、呼び出された関数で、その関数にデバッグ情報が含まれていなくても停止し、 逆アセンブルが表示されます。フィルターがオン (ボタンが選択されている) の場合、デバッガーは、 ソースが表示可能である場合のみ、呼び出された関数で停止します。ソースが表示可能でない場合、 デバッガーは、「ステップオーバー」が発行された場合と同じ動作をします。DER_DBG_ STEP_DEBUG デバッグ・エンジン環境変数によって、「ステップ・フィルターの使用」アクションの 動作が変わります。デバッグ・エンジン環境変数については、 関連トピックを参照してください。

    注: PL/I と COBOL では、ステップイン・アクションは通常、ステップ・フィルター・アクションが常にオンになっている場合と同じように動作します。これらの言語で作成されたプログラムのデバッグしているとき、デバッガーはソース・コードで停止しようとします。
  • ステップ・リターン (「ステップ・リターン」アイコン)(F7): ステップ・リターンを発行すると、 プログラムは、呼び出し側プログラム内の、現在の関数への呼び出しの直後のポイントまで 実行します。 通常、呼び出し命令に続く場所で停止するようにします。 呼び出し側プログラムにデバッグ情報がある場合、これは、ソース行の中央です。
  • アニメーション表示ステップイン: このアクションを発行すると、デバッガーは、ステップイン・アクションを繰り返し発行します。「アニメーション表示ステップイン」アクションを再度選択することで、各ステップの間の遅延を制御できます。

フィードバック