Sun WorkShop の概要 ホーム目次前ページへ次ページへ索引


第 4 章

プログラムのデバッグ

Sun WorkShop には、プログラムの実行を制御し、停止したプログラムの状態を検査する統合デバッグサービスが用意されています。プログラムを動的に実行して完全に制御し、パフォーマンスデータを収集できます。

「デバッグ」ウィンドウ (「デバッグ」 「デバッグウィンドウの表示」を選択して開きます) と、その下位のデバッグウィンドウから次のことを行えます。

また、Sun WorkShop には、コードのデバッグに役立つマシンレベルのコマンドやその他のコマンドも用意されています。「dbx コマンド」ウィンドウから標準の dbx コマンドを利用することもできます。

デバッグ方法とデバッグの概念、デバッグウィンドウ、dbx コマンドについては、オンラインヘルプを参照してください (オンラインヘルプには、Sun WorkShop のどのウィンドウからでも「ヘルプ」メニューまたは「ヘルプ」ボタンでアクセスできます)。

デバッグの準備

デバッグを行うには、ソースファイルをコンパイルしたときのデバッグ情報が必要になります。デバッグ情報を作成するには、次のいずれかを行います。

デバッグの開始

プログラムのデバッグを開始するには、次の手順に従ってください。

1. デバッグの状態を選択します。

2. デバッグするプログラムを選択します。

現在のプログラムをデバッグするには、Sun WorkShop メインウィンドウのツールバーから「デバッグ」ボタンをクリックします。別のプログラムをデバッグするには、次のいずれかの操作を行います。

3. 「デバッグ」ウィンドウから次のいずれかの操作を行い、プログラムを実行します。


図 4-1   Sun Workshop の「デバッグ」ウィンドウ

デバッグセッションのカスタマイズ

次のオプションのデフォルト値を変更することによって、デバッグセッションをカスタマイズできます。

デバッグオプションを表示するには、「デバッグ」ウィンドウから「デバッグ」 「デバッグオプション」を選択します。「デバッグオプション」ダイアログボックスでは、特定のデバッグセッションだけカスタマイズすることも、デバッガ全体のデフォルト値を変更することもできます。dbxenv コマンドを使用して、dbx の環境変数を設定することによって、デフォルト値の多くを変更することもできます (詳細はオンラインヘルプを参照)。

デバッグオプションの設定についての詳細は、次を参照してください。

コードのステップ実行

コードを 1 行ずつ移動して、ステップごとに表示しながら実行できます。ステップ実行すると、プログラム内の現在の位置が緑色で強調表示されます。これをプログラムカウンタ (PC) と呼びます。PC は、各ステップごとに次に実行されるソース行に移動します。

ステップ実行には、次の 3 つの方法があります。

ステップイン (step) ソース行を 1 行先に進めます。ソース行が関数呼び出しの場合、デバッガは関数の最初の文の前で停止します。
ステップオーバー (next) ソース行を 1 行先に進めます。ソース行が関数呼び出しの場合、デバッガは関数の命令についてはステップ実行しないで、関数全体を実行します。
ステップアウト (step out) 現在の関数の実行を終了し、その関数呼び出しの直後のソース行で停止します。PC が呼び出しと同じソース行で停止した場合は、その呼び出しに関係する機械命令がいくつか残っています。もう一度ステップ実行を行うと、呼び出しが完了し、次のソース行に進みます。


コードのステップ実行についての詳細は、オンラインヘルプを参照してください。

ブレークポイントの設定

ブレークポイントを設定することによって、強制的にデバッガの実行を停止できます。単純なブレークポイント設定では、実行を停止する特定のコード行位置や手続き、関数を指定できます。詳細なブレークポイント設定では、C++ クラス内や特定の条件、特殊なイベントでの停止を指定したり、データの変化を追跡するように指定したり、独自のブレークポイントを作成したりできます。

ブレークポイントの設定と解除は、エディタのウィンドウまたは「ブレークポイント」ウィンドウで行うことができます。エディタのウィンドウでは、コード行位置や関数に対するブレークポイントを設定、解除できます。「ブレークポイント」ウィンドウでは、 シグナルが発生したときなどの、より複雑なブレークポイントを設定できます (「デバッグ」ウィンドウの「ブレークポイント」タブには、すでに設定されているブレークポイントが表示されます) 。

ブレークポイントの設定と使用方法については、オンラインヘルプを参照してください。

値とデータの検査

評価とは、式の値に対して一度だけ行われる無作為抽出検査です。エディタウィンドウまたは「デバッグ」ウィンドウから、いつでも式を評価できます。「デバッグ」ウィンドウの「データ表示」タブまたは独立した別の「データ表示」ウィンドウを使用して、プログラム停止時の値の変化を追跡できます。

評価結果は、「デバッグ」ウィンドウの「データ履歴」タブに一覧表示されます。点線は、前回の評価から評価コンテキストに変化があったことを示します。「データ履歴」タブの履歴リストは、以前に評価された式のリストです。「データ履歴」タブの履歴リストは、「データ」 「履歴消去」を選択することによっていつでも消去できます。

エディタのウィンドウから式を評価するには、次のいずれかを行います。

値は「データ履歴」タブに表示されるか、エディタのウィンドウ最下部のメッセージ表示領域に表示されます (評価結果が短い場合)。評価コンテキストに変化があると、必ず、「データ履歴」タブのリストに区切り線が挿入されます。詳細は、オンラインヘルプを参照してください。

データ値の監視

デフォルトでは、「データ表示」は「デバッグ」ウィンドウのタブとして表示されますが、独立したウィンドウとして表示されるように設定することもできます。詳細は、オンラインヘルプを参照してください。

「デバッグ」ウィンドウの「データ表示」タブから、プログラム実行中の式の値の変化を観察できます。選択した一群の式は、ブレークポイント位置やステップ実行位置、プログラムの実行が中断されたときなどの、プログラムの実行停止のたびに、自動的に評価されます。式の値が変化すると、その値が太字で強調表示されます。

「データ表示」には、実行を中止するたびに値の変化が表示されます。プログラムの実行中に値の変化を観察する必要がある場合は、「アクセス時」ブレークポイント機能を使用してください (詳細は、オンラインヘルプを参照)。このブレークポイント機能を使用して、特定のメモリー位置に対する読み取りまたは書き込みが行われるたびにプログラムの実行を中止するように指示できます。

「データ表示」タブまたはウィンドウから、ポップアップウィンドウを開いて、式に関する追加情報を表示して管理できます。

詳細は、オンラインヘルプを参照してください。

パフォーマンスデータの収集

デバッガでのプログラムの実行中に、標本コレクタを使用して、パフォーマンスデータを収集し、標本アナライザで利用できる実験ファイルに出力できます。標本コレクタは、クロックに基づくプロファイルデータやスレッド同期の待ち状態トレースデータ、ハードウェアカウンタのオーバーフローに関するプロファイルデータ、アドレス空間データを収集できます。コレクタは、ページフォルトや入出力データ、コンテキストスイッチ、ワークセットやページング統計情報などの、グローバル実行の統計情報を自動的に記録します。

パフォーマンスデータの収集と解析については、次を参照してください。

実行時エラーの検出

実行時検査 (RTC) では、開発段階におけるアプリケーションの実行時エラーを自動検出できるほか、次のことを行えます。

実行時検査を行う場合は、プログラムを実行する前に検査の種類を選択しておく必要があります。その後、プログラムを実行すると、メモリーの使用状況に関するレポートが作成されます。

詳細は、オンラインヘルプを参照してください。

コードのトレース

トレース機能は、プログラムで発生するイベントに関する情報を収集して、収集したデータを「dbx コマンド」ウィンドウに表示します。このとき、プログラムの実行は停止しません。

トレースにフィルタを設定しないと、実行直前のソースコードの各行が表示されるため、単純なプログラム以外では大量の情報が出力されます。トレースにフィルタを設定して、トレースするプログラムのイベントを限定すると、特定の種類のデータを表示できます。たとえば、特定の関数呼び出しや特定の名前のメンバー関数、クラス内の関数、または関数からの終了をトレースできます。変数の値の変化をトレースすることもできます。

イベントは、デバッグ対象に設定されたプログラムのイベントです。代表的なイベントとしては、特定の変数の値の変化があります。ハンドラはデバッグイベントを管理します。「ブレークポイント」ウィンドウのトレースリストは、イベントの一種であるトレースを管理するため、トレースハンドラと呼ばれます。

詳細は、オンラインヘルプを参照してください。

呼び出しスタックの検査

呼び出しスタックは、現在アクティブなすべてのルーチン、すなわち、呼び出されたが、まだそれぞれの呼び出し元には復帰していないすべてのルーチンを表します。スタック区画には、関数とその引数が、呼び出された順序で一覧表示されます。初期関数 (C および C++ プログラムでは main()) はスタック区画の先頭、プログラムが停止した時点で実行されていた関数はスタック区画の最後に示されます。後者の関数を「停止位置関数」と呼びます。

停止位置関数のソースコードは、エディタのウィンドウに表示され、次に実行される行は緑色で強調表示されます。

呼び出しスタックでは、次のいずれかの操作を行うことができます。

「ポップ」は、制限付きの元に戻す機能です。再び現在の関数の先頭から実行を開始するには、親スタックフレームまでポップし、その関数にステップインします。これで、関数の先頭に戻ります。

呼び出しスタックの使用方法については、オンラインヘルプを参照してください。

マルチスレッドプログラムのデバッグ

マルチスレッドプログラムであることが検出されると、「デバッグ」ウィンドウの「スレッド」タブが開きます。この状態から、「セッション」タブをクリックすることによって、セッションを表示できます。マルチスレッドプログラムの場合、「セッション」タブには、現在の選択されているプロセス内のスレッドに関する情報が一覧表示されます。現在のスレッドには、緑色の矢印が付きます。

詳細は、オンラインヘルプを参照してください。

複数プロセスの同時デバッグ

各プログラムをそれぞれ独立したデバッグセッションに接続し、一度に複数のプログラムをデバッグできます。この機能は、たとえば次のような場合に使用します。

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

セッションの管理

「デバッグ」ウィンドウの「セッション」タブおよび「活動状態セッション」ダイアログボックスは、現在アクティブな、すべてのデバッグセッションの一覧です。「活動状態セッション」ダイアログボックスを開くには、「デバッグ」ウィンドウから「デバッグ」 「セッション管理」を選択します。現在のプログラムには、矢印が付きます。

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

複数のセッションをデバッグすることはできますが、同時に複数のセッションのコンテキストを表示することはできません。別のセッションに切り替えると、「デバッグ」ウィンドウ、エディタウィンドウ、「dbx コマンド」ウィンドウなどはすべて、切り替え先のセッションのコンテキストを反映した内容になります。

2 つのプログラムを横に並べて表示する (それぞれのプログラムにエディタのウィンドウと「デバッグ」ウィンドウを表示する) には、2 つの WorkShop アプリケーションを実行する必要があります。2 つの WorkShop アプリケーションが同じエディタを使用しないようにするには、両方の WorkShop アプリケーションを次のコマンドを使用して起動します。

% workshop -s editsessionname

たとえば、最初の WorkShop アプリケーションは workshop -s 1、2 つ目の WorkShop アプリケーションは workshop -s 2 のようにします。詳細は、workshop(1) のマニュアルページを参照してください。

セッションの管理については、オンラインヘルプを参照してください。

子プロセスのデバッグ

プロセスが子プロセスをフォークした場合は、親または子プロセスのみ、またはその両方をデバッグするかを選択できます。通常、フォークされたプロセスからはすべてのブレークポイントが削除されますが、この設定を無効にすることもできます。

詳細は、オンラインヘルプを参照してください。

デバッグの終了

現在 Sun WorkShop の制御下にあるプロセスを終了しないで「デバッグ」ウィンドウを閉じるには、「デバッグ」 「閉じる」を選択します。この場合、Sun WorkShop の制御下にあるプロセスは、メモリーと CPU 時間を消費しながら、動作を継続します。Sun WorkShop は、それらプロセスに関するデータの記録を継続します。

Sun WorkShop の制御下にあるすべてのプロセスを終了して、すべてのデバッグウィンドウを閉じるには、「デバッグ」ウィンドウから「デバッグ」 「デバッグを終了」を選択します。


サン・マイクロシステムズ株式会社
Copyright information. All rights reserved.
ホーム   |   目次   |   前ページへ   |   次ページへ   |   索引