Sun WorkShop 入門

プロセスの同時デバッグ

各プログラムを独立したデバッグセッションに接続し、一度に複数のプログラムをデバッグすることができます。同時にデバッグできるプログラムには、次のようなものがあります。

複数のセッションを同時デバッグする場合、一度に表示できるのは 1 つのセッションのコンテキストだけです。「活動状態セッション」ダイアログボックス (図 5-6) にはデバッグセッションがすべて一覧表示されるので、自由にセッションを切り替えることができます。現在のプログラムは、矢印で示されています。別のセッションに切り替えると、新しいセッションのコンテキストに合わせて、「デバッグ」ウィンドウ、エディタウィンドウ、「dbx コマンド」ウィンドウなどの表示が変更されます。

図 5-6 「活動状態セッション」ダイアログボックス

Graphic

複数のセッションをデバッグすると、大量のリソースが消費されるため、システムの処理速度が低下することがあります。「デバッグ」ウィンドウで、現在活動状態になっているセッションの数を確認して、不要なセッションがあれば、「活動状態セッション」ダイアログボックスの「セッション終了」または「切り離す」をクリックして削除してください。

プログラムのデバッグ時に、別のプログラムのデバッグを要求すると、現在プログラムをデバッグ中であるというメッセージが表示されます。ここで、現在のセッションを終了または切り離して新しいデバッグセッションを読み込むか、現在のセッションを再利用するか、両方のセッションをデバッグするかを選択してください。両方のプログラムを同時にデバッグしたい場合以外は、両方のセッションのデバッグを選択しないでください。

セッションの管理

Sun WorkShop セッションでは、任意の数のプログラムをデバッグできます。デバッグされているプログラムのリストは、「活動状態セッション」ダイアログボックスと「デバッグ」ウィンドウのセッション区画に記録されるので、この中から任意のプログラムを選択して処理を中止したり、切り離したり、終了させることができます。また、プログラムを切り替えることもできます。なお、現在のプログラムは、矢印で示されています。

「活動状態セッション」ダイアログボックスを使用してセッションを管理するには、次の手順に従ってください。

  1. 「デバッグ」ウィンドウで、「デバッグ」⇒「セッション管理」を選択します。

    「活動状態セッション」ダイアログボックスが表示されます。

  2. スクロールリストからプログラムを選択します。

  3. 次のいずれかのボタンをクリックします。

    「現対象にする」 

    選択されたプログラムを現在のプログラムにします。選択されたプログラムのコンテキストに合わせて、スタック区画やエディタウィンドウなどの表示が変更されます。 

    「終了」 

    デバッグセッションを終了しないで、プログラムを終了します。 

    「切り離す」 

    選択されたプログラムまたはデバッグセッションを終了しないで、プログラムを切り離します。 

    「セッション終了」 

    選択されたプログラムを終了し、デバッグセッションを削除します。セッションが 1 つしかない状態で、このボタンをクリックすると、セッションが削除され、「デバッグ」ウィンドウにデバッグセッションがないことが表示されます。 

  4. 「閉じる」をクリックします。

「デバッグ」ウィンドウのセッション区画のセッションを管理するには、次の手順に従ってください。

  1. 「セッション/スレッド」区画が開かれていない場合は、サッシをスタック区画の上にドラッグして、「セッション/スレッド」区画を開きます。

  2. スレッド区画が表示されている場合は、区画の上部にある「セッション」ラジオボタンをクリックします。


    注 -

    複数のプログラムをデバッグする場合は、システムの処理速度がかなり低下する恐れがあります。不要になったセッションは、必ず中止するか、切り離すか、終了してください。


デバッグセッションの終了

複数のセッションをデバッグすると、大量のリソースが消費されるので、システムの処理速度が低下することがあります。デバッグセッションが不要になった場合は「セッション終了」ボタンで実行中のプログラムを切り離すか、読み込まれているプロセスを終了します。デバッグセッションは保持されません。

現在のデバッグセッションを終了するには、次の手順に従ってください。

  1. 「デバッグ」ウィンドウで、「デバッグ」⇒「セッション管理」を選択します。

  2. リストから、終了したいセッションを選択します。

  3. 「セッション終了」をクリックします。


    注 -

    「終了」コマンドを使用すると、現在のプロセスのデバッグは終了しますが、デバッグセッションは保持されたままです。このように、セッションがすでに起動しているため、最初にプログラムを読み込んだときよりも短時間で別のプログラムを読み込むことができます。ただし、デバッグセッションを保持したままにしておくと、スワップ領域が占有されます。スワップ領域が不足した場合は、「セッション終了」を使用して、プログラムを終了し、デバッグセッションも終了してください。


子プロセスのデバッグ

プロセスが子プロセスをフォークした場合、デバッグ対象を親プロセスのみ、子プロセスのみ、またはその両方に指定することができます。また、フォークしたプロセスからすべてのブレークポイントを削除しないように設定することもできます。

フォークしたプロセスでは、コレクタは使用できません。

実行時に常に同じデバッグ処理を行う場合、デフォルトの動作を指定しておくと、ダイアログボックスでの指定を省略できます。

フォークされるプロセスにデフォルト値を設定するには、次の手順に従ってください。

  1. 「デバッグ」ウィンドウで、「デバッグ」⇒「デバッグ用オプション」を選択します。

  2. 「カテゴリ」⇒「フォークとスレッド」を選択します。

  3. 次のいずれかのラジオボタンをクリックします。

    「親」 

    フォークされたプロセスを無視し、親プロセスをデバッグします (デフォルト)。 

    「子」 

    フォークされたプロセス (子プロセス) をデバッグします。現在のプロセスのプロセス ID は、子プロセスのプロセス ID になります。このとき、親プロセスは切り離されているようにみえますが、実際には実行を継続しています。また、子プログラムは接続されているようにみえますが、実際には一時停止しています。子プロセスを実行するには、「実行」または「ステップイン (step)」を使用します。 

    「両方」 

    子プロセスをデバッグするための第 2 のデバッグセッションを開始し、現在のセッションとします。親プロセスのデバッグセッションも、実行中プロセスとして保持されます。子プロセスは、接続されているようにみえますが、一時停止しています。 

    「ユーザーに問い合わせる」 

    フォークが検出されるたびに、親プロセスと子プロセスのいずれか一方または両方を選択するダイアログボックスが表示されます。また、デバッグごとにプログラムの状態を調べて、どのフォークプロセスをデバッグするかを選択することができます。 

  4. 「了解」をクリックして、現在のセッションに選択内容を適用するか、「デフォルトとして保存」をクリックした後「了解」をクリックして、新しいデフォルト値として保存します。

プロセスが fork() を実行するたびに、選択した処理が実行されます。

新しいフォークで別のプロセスが実行されない場合に、親プロセスのブレークポイントを子プロセスが継承できるようにするには、次の手順に従ってください。

  1. 「デバッグ」ウィンドウで、「デバッグ」⇒「デバッグ用オプション」を選択します。

  2. 「カテゴリ」⇒「フォークとスレッド」を選択します。

  3. 親プロセスのブレークポイントを継承する子プロセスのチェックボックスをクリックして、この子プロセスを有効にします。

  4. 「了解」をクリックして、現在のセッションに選択内容を適用するか、「デフォルトとして保存」をクリックした後「了解」をクリックして、選択内容を新しいデフォルト値として保存します。