以降の節では、プログラムのデバッグを開始した後の基本的な操作手順について説明します。詳細については、『dbx コマンドによるデバッグ』を参照してください。
デバッグセッション中に、引数、実行ディレクトリ、環境変数などの引数を変更することができます。
デバッグ対象のプログラムを読み込むときに、プログラムの引数を指定することができます。プログラムを読み込んだ後でも、いつでも引数を編集することができます。
シェルに対して特別な意味を持つ文字を含む引数をテキストフィールドに入力する場合、バックスラッシュ (¥) か引用符 ("") で括って、その意味を無効にする必要があります。このような特殊文字には、| $ ; < > ( ) $ ' ¥ " ' * ? [ ] スペース、タブ、改行があります。
プログラムの読み込み時にプログラムの引数を指定するには、コマンド行に入力するときと同じように、「新規プログラムデバッグ」ダイアログボックスの「引数」テキストフィールドに引数を入力します。プログラム名は入力しません。
プログラムの読み込み後にプログラム引数を編集するには、次の手順に従ってください。
デバッグ対象のプログラムの読み込み時に実行ディレクトリを指定するには、次の手順に従ってください。
「実行ディレクトリ」テキストフィールドにディレクトリ名を入力します。「. . .」ボタンをクリックして「実行ディレクトリ」ダイアログボックスを表示し、ディレクトリ名を選択することもできます。
「了解」をクリックします。
プログラムの読み込み後に実行ディレクトリを変更するには、次の手順に従ってください。
「デバッグ」⇒「実行時の引数の編集」を選択し、「実行時の引数の編集」ダイアログボックスを開きます。
「実行ディレクトリ」テキストフィールドにディレクトリ名を入力します。「. . .」ボタンをクリックして「実行ディレクトリ」ダイアログボックスを表示し、ディレクトリ名を選択することもできます。
「了解」をクリックします。
プログラムの実行時に有効な環境変数を指定することができます。プログラムが実行される際、実行コマンドの前に、これらの環境変数の setenv コマンドが実行されます。
「環境変数」ダイアログボックスを使用して、「持続的環境変数」リストに環境変数を追加したり、リストから削除することができます。「持続的環境変数」リスト中のすべての環境変数は、ワークセットとともに保存されます。
プログラムを実行するための「持続的環境変数」リストの内容は、プログラムを構築するための「持続的環境変数」リストの内容とは異なっています。「環境変数の使い方」を参照してください。
「環境変数」ダイアログボックスを開くには、次の手順に従ってください。
プログラムの読み込み時に環境変数を設定する場合
「デバッグ」⇒「新規プログラム」を選択し、「新規プログラムデバッグ」ダイアログボックスを開きます。ここで、「環境変数」をクリックしてください。
プログラムを読み込んだ後に環境変数を変更する場合
「デバッグ」⇒「実行時の引数の編集」を選択し、「実行時の引数の編集」ダイアログボックスを開きます。ここで、「環境変数」をクリックしてください。
「持続的環境変数」リストに環境変数を追加するには、次の手順に従ってください。
「名前」テキストフィールドに環境変数の名前を入力します。
「値」テキストフィールドに、変数の値を入力します。
間違えて入力した場合は、「消去」をクリックすると、「名前」テキストフィールドと「値」テキストフィールドのエントリを消去できます。
「追加」をクリックして、「持続的環境変数」リストに環境変数を追加します。
上記の 3 つの手順を繰り返して、他の環境変数をすべて追加します。
「了解」をクリックして、ダイアログボックスを閉じます。
Return キーを押すと、入力フォーカスが次の項目に移動します。
「持続的環境変数」リストから変数を削除するには、次の手順に従ってください。
「持続的環境変数」リストの環境変数の値を変更するには、次の手順に従ってください。
「持続的環境変数」一覧に表示されている環境変数定義と同じ名前の環境変数が現在のデバッグ環境にある場合、現在のデバッグ環境に表示される環境変数は無効になります。
現在のデバッグ環境の変数定義を確認するには、「詳細」をクリックして「現在の環境」リストを開き、プログラムのデバッグ環境内の環境変数をすべて表示します。「フィルタを通す」テキストフィールドを使用すれば、リストにフィルタをかけることができます。
環境変数の値を無効にするには、次の手順に従ってください。
「現在の環境」リストから環境変数を選択します。
「<<追加」をクリックして、「持続的環境変数」リストに環境変数を追加します。
「値」テキストフィールドに新しい値を入力して、「変更」をクリックします。
「了解」をクリックして変更を確定し、ダイアログボックスを閉じます。
「持続的環境変数」リスト中の環境変数定義によって、現在のデバッグ環境での環境変数定義が無効になり、ワークセットとともに保存されます。
dbx コマンドの unset variable を使用すれば、変数を削除し、その値の設定を解除することができます (variable は変数)。
コードを 1 行ずつ移動して、ステップごとに表示しながら実行することができます。ステップ実行すると、プログラム内の現在の位置が緑色で強調表示されます。これをプログラムカウンタと呼びます。プログラムカウンタは、各ステップごとに次に実行されるソース行に移動します。
ステップイン (step) |
ソース行を 1 行先に進めます。ソース行が関数呼び出しの場合、デバッガは関数の最初の文の前で停止します。 |
ステップオーバー (next) |
ソース行を 1 行先に進めます。ソース行が関数呼び出しの場合、デバッガは関数の命令についてはステップ実行しないで、関数全体を実行します。 |
ステップアウト (step up) |
現在の関数の実行を終了し、その関数呼び出しの直後のソース行で停止します。 |
現在の関数が実行された後に、その関数呼び出しの行が再度強調表示されることがあります。このような場合は、他にも実行されるべき何らかのポストコール命令が残っています。再度ステップインまたはステップオーバーを実行すると、このような関数は呼び出されなくなります。
ステップ実行でコードを表示するには、次の手順に従ってください。
プログラムが停止するまで待機します。または、「実行」⇒「割り込み」を選択して「割り込み」ボタンをクリックするか、Ctrl + Break を押します。
エディタウィンドウで、1 行ずつコードをステップ実行します。このとき、関数の中に入るか入らないか、関数の終端に移動するかどうかを選択します。
プログラムのソースを 1 行ずつステップ実行する場合
「実行」⇒「ステップイン (step)」を選択するか、「ステップイン (step)」ボタン (図 5-1 または図 5-2 を参照) をクリックするか、F8 キーを押します。
現在の関数でソースを 1 行ずつステップ実行する場合
「実行」⇒「ステップオーバー (next)」を選択するか、「ステップオーバー (next)」ボタンをクリックするか、F7 キーを押します。
現在の関数を終了してその関数呼び出しの直後にあるソース行の実行を停止する場合
「実行」⇒「ステップアウト (step up)」を選択するか、「ステップアウト (step up)」ボタンをクリックします。
「継続」をクリックするか、「実行」⇒「継続」を選択して、プログラムの実行を続行します。
ブレークポイントを設定すると、デバッガは強制的に実行を停止します。コードの行、手続き、関数で停止する単純なブレークポイントを設定できます。
C++ クラスのブレーク、データの変更の追跡、条件のブレーク、特殊なイベントのブレークに対して高度なブレークポイントを選定するか、カスタムブレークポイントを独自に作成します。
ブレークポイントの設定と解除は、エディタウィンドウ (図 5-2) か「ブレークポイント」ウィンドウ (図 5-4) で行うことができます。エディタウィンドウでは、コードの 1 行または関数に対するブレークポイントの設定と解除が可能です。「ブレークポイント」ウィンドウでは、信号が発生したときのブレークポイントなど、複雑なブレークポイントの設定が可能です。
ある行にブレークポイントを設定するには、次の手順に従ってください。
ブレークポイントを設定する行をクリックします。
「指定行で停止」ボタンをクリックします。
ブレークポイントが設定されると、その行は赤で強調表示されます。選択された行が実行可能なソースコード行でない場合、デバッガは、指定された行の次に現れる実行可能な行にブレークポイントを設定します。
関数にブレークポイントを設定するには、次の手順に従ってください。
ブレークポイントを削除するには、次の手順に従ってください。
図 5-4 の「ブレークポイント」ウィンドウを開くには、「デバッグ」ウィンドウで「ウィンドウ」⇒「ブレークポイント」または「実行」⇒「ブレークポイントを設定」を選択します。
指定位置にブレークポイントを設定するには、次の手順に従ってください。
「詳細」区画が表示されていない場合は、「ブレークポイントの追加/変更」ボタンをクリックします。
「イベント」リストから「指定位置で」を選択し、テキストフィールドにファイル名と行番号 (Foo.cc:21 など) を入力します。
「動作」リストから「停止」を選択します (設定済みの場合は不要)。
「追加」をクリックします。
ブレークポイントが設定されると、その行は赤で強調表示されます。選択された行が実行可能なソースコード行でない場合、デバッガは、指定された行の次に現れる実行可能な行にブレークポイントを設定します。
関数のブレークポイントを設定するには、次の手順に従ってください。
「詳細」区画が表示されていない場合は、「ブレークポイントの追加/変更」ボタンをクリックします。
「イベント」リストから「指定位置で」を選択し、テキストフィールドに関数または手続きの名前を入力します。
「動作」リストから「停止」を選択します (設定済みの場合は不要)。
「追加」をクリックします。
現時点でアクティブになっているブレークポイントのリストにブレークポイントが追加されます。
ブレークポイントを削除するには、次の手順に従ってください。
スクロールリストからブレークポイントを 1 つ選択し、「削除」をクリックする
「すべてを削除」をクリックして、ブレークポイントをすべて削除する
プログラム内を移動しながら、ブレークポイントを無効にしたり再度有効にしたりします。
スクロールリスト |
プログラムに割り当てられているブレークポイントとトレースポイントを表示します。 |
|
ブレークポイント、トレースポイントの状態には、次の 3 種類があります。 −有効。赤の停止印で示されます。 −無効。×印が付いたグレーの停止印で示されます。 −実行。矢印で示されます。 |
「削除」ボタン |
ソースコードとスクロールリストから、ブレークポイントまたはトレースポイントを削除します。 |
「すべてを削除」ボタン |
ソースコードとスクロールリストから、ブレークポイントまたはトレースポイントをすべて削除します。 |
「有効」ボタン |
選択されたブレークポイントまたはトレースポイントを有効にして、そのグリフを赤の停止印に変更します。 |
「無効」ボタン |
一覧表示されたブレークポイントまたはトレースポイントを無効にして、そのグリフを×印が付いたグレーの停止印に変更します。 |
「すべて無効」ボタン |
一覧表示されたブレークポイントまたはトレースポイントをすべて無効にして、グリフを×印が付いたグレーの停止印に変更します。 |
「すべて有効」ボタン |
一覧表示された無効になっているブレークポイントまたはトレースポイントをすべて有効にして、グリフを赤の停止印に変更します。 |
「ソース表示」ボタン |
選択したブレークポイントまたはトレースポイントのソース行をエディタウィンドウに表示します。 |
「ブレークポイントを追加、変更」ボタン |
「ブレークポイント」ウィンドウを拡張します。クリックすると、プログラム内のブレークポイントの追加または変更のオプションが表示されます。このボタンは、「詳細を隠す」と切り替わります。 |
「詳細」区画 |
ブレークポイントの詳細を指定できます。 |
「イベント」リスト |
プログラムの実行を一時停止する位置と時期を設定することができます。 |
「イベント」テキストフィールド |
ファイル名とイベントの行番号を指定します。 |
「動作」リスト |
停止やトレースなどのブレークポイントアクションを設定します。 |
「オプション」リスト |
ブレークポイントまたはトレースポイントに対して制限を追加します。 |
「追加」ボタン |
指定されたアクション、イベント、オプションを付けてブレークポイントまたはトレースポイントをソースコードに追加します。エディタウィンドウでは、ブレークポイントまたはトレースポイントの表示位置の左側に停止印のグリフが表示され、その行が赤で強調表示されます。ブレークポイントまたはトレースポイントは、「ブレークポイント」スクロールリストにも表示されます。 |
「変更」ボタン |
選択されたブレークポイントかトレースポイントのイベント、アクション、オプションを更新します。 |
「消去」ボタン |
「イベント」、「動作」、「オプション」の各テキストフィールドからエントリをすべて削除します。 |
「閉じる」ボタン |
「ブレークポイント」ウィンドウを閉じます。 |
「ヘルプ」ボタン |
「ブレークポイント」ウィンドウのオンラインヘルプを表示します。 |
デバッガでのプログラムの実行時に、標本コレクタを使用してパフォーマンスデータを収集し、標本アナライザで使用する実験ファイルとして出力することができます。標本コレクタでは、プログラムのメモリ使用状況データ、関数の呼び出し時間を除く実行プロファイルデータ、関数の呼び出し時間を含む実行プロファイルデータを収集できます。パフォーマンスデータの収集および解析の詳細については、『プログラムのパフォーマンス解析』、Sun WorkShop のオンラインヘルプを参照してください。
パフォーマンスデータを収集できるのは、Sun WorkShop の「デバッグ」ウィンドウで実行しているときだけです。また、このとき実行時検査機能はオフになっている必要があります。
パフォーマンスデータを収集するには、次の手順に従ってください。
「ウィンドウ」⇒「標本コレクタ」を選択します。
「実験ファイル」テキストフィールドに実験ファイルの完全パス名を入力します。
1 回の実行のみのデータを収集するか、すべての実行のデータを収集するかを選択します。
1 回の実行のみに対して標本コレクタを実行すると、実験ファイルが作成されて、標本収集が終了します。すべての実行に対して標本コレクタを実行すると、実験ファイルの作成後も標本収集は終了しません。
収集するデータの型を選択します。
実行プロファイルデータを収集する場合は、「プロファイルデータ収集」スライダで、標本を収集する頻度を指定してください。
「新規標本」コマンドの「手動」、または「周期的に」ラジオボタンを選択して、コレクタがデータの収集に割り込んで集計を行う時期を決定します。
「周期的に」ボタンを選択する場合、コレクタが標本を集計する間隔を「周期」スライダで定義します。
「開始」か「継続」をクリックして、デバッガでプログラムの実行を開始します。
実行時検査 (RTC) では、開発段階におけるアプリケーションの実行時エラーを自動検出できるほか、次の機能を実行することができます。
メモリーアクセスエラーの検出
メモリーリークの検出
メモリーの使用状況に関するデータの収集
すべての言語への対処
ライブラリなど、ソースがないコードの処理
実行時検査を行う場合は、プログラムを実行する前に検査の種類を選択しておく必要があります。その後、プログラムを実行すると、メモリーの使用状況に関するレポートが作成されます。
実行時検査をカスタマイズして、レポートのオプション、エラーのレポート、レポートのスタックの深さに関するデフォルト値を設定することができます。
実行時検査オプションを設定するには、次の手順に従ってください。
「デバッグ」⇒「デバッグ用オプション」を選択します。
「デバッグオプション」ダイアログボックスが表示されます。
「カテゴリ」ボタンをクリックして、「実行時検査」を選択します。
「実行時検査」のカテゴリで必要な設定をクリックします。
実行時検査のオプションの詳細については、オンラインヘルプで、実行時検査オプションの設定に関連する項目を参照してください。
メモリー使用状況の検査を有効にするには、次の手順に従ってください。
「デバッグ」ウィンドウで、「ウィンドウ」⇒「実行時検査」を選択します。
「実行時検査」ウィンドウが表示されます (図 5-5 を参照)。
「デバッグ」ウィンドウまたは「実行時検査」ウィンドウで、「検査」⇒「メモリー使用状況検査を有効に」を選択します。
「デバッグ」ウィンドウのステータス表示領域と「実行時検査」ウィンドウに、3 つの矢印が円を描いた形の青い記号が表示され、メモリー使用状況の検査が有効になったことを示します。
メモリーアクセスの検査を有効にするには、次の手順に従ってください。
「デバッグ」ウィンドウで、「ウィンドウ」⇒「実行時検査」を選択します。
「実行時検査」ウィンドウが表示されます (図 5-5 を参照)。
「デバッグ」ウィンドウまたは「実行時検査」ウィンドウで、「検査」⇒「アクセス検査を有効に」を選択します。
「デバッグ」ウィンドウのステータス表示領域と「実行時検査」ウィンドウに、中央に白いマイナス記号のある赤い円が表示され、メモリーアクセスの検査が有効になったことを示します。
「ファイル」メニュー |
エラーログを開いたり保存したりします。また、「実行時検査」ウィンドウから情報を消去したり、ウィンドウを閉じることもできます。 |
「リーク」メニュー |
メモリーリークレポートの詳細レベルと内容を制御します。 |
「ブロック」メニュー |
メモリーブロックレポートの詳細レベルと内容を制御します。 |
「オプション」メニュー |
「デバッグオプション」ダイアログボックスの「実行時検査」カテゴリを表示します。 |
「検査」メニュー |
メモリーの使用状況の検査や、メモリーアクセスの検査を選択します。 |
「最後に報告されたエラーの抑止」ボタン |
プログラムの実行を継続する場合に、最後に報告されるエラーの報告を抑制します。エラーが報告された後、プログラムが停止したり、中断された場合に使用します。 |
「レポート表示」ラジオボタン |
出力表示区画に表示する実行時検査レポート (アクセス、メモリーリーク、メモリーブロック) を制御します。 |
出力表示区画 |
アクセス、メモリーリーク、メモリーの使用状況に関するレポートが表示されます。プログラムの各回の実行または新しく要求されたレポートは、区切り線で区別されます。 |
トレースとは、プログラム内の事象に関する情報を収集し、「dbx コマンド」ウィンドウに表示することです。このとき、プログラムの実行は停止しません。
トレースにフィルタを設定しないと、実行直前のソースコードの各行が表示されるため、単純なプログラム以外では大量の情報が出力されてしまいます。
トレースにフィルタを設定すると、プログラムのイベントに関する情報を表示できるほか、関数呼び出し、指定の名前のメンバー関数、クラス内の関数、関数からの終了などをすべてトレースできます。変数の値の変化をトレースすることもできます。
イベントとは、プログラムのイベントとデバッグの処理を関連付けたものを指します。主なイベントには、指定された変数の値の変更などがあります。「ブレークポイント」ウィンドウのトレースリストは、トレースとイベントタイプの管理を行うことから、トレースハンドラと呼ばれています。
トレースを設定するには、次の手順に従ってください。
「ブレークポイント」ウィンドウで「詳細」区画が表示されていない場合は、「ブレークポイントを追加、変更」ボタンをクリックします。
「イベント」リストボックスからトレースするイベントを選択します。
テキストフィールドに、関数名、ファイル名、行番号などのイベント情報を入力します。
「動作」⇒「トレース」を選択します。
「追加」をクリックします。
「デバッグオプション」ダイアログボックスの「デバッグの動作」カテゴリでは、トレースの速度を調節することができます。デバッグオプションの設定については、オンラインヘルプで、デバッグに関連する項目を参照してください。
評価とは、式の値に対して一度だけ行われる無作為抽出検査です。エディタウィンドウまたは「デバッグ」ウィンドウで、いつでも式を評価できます。また、プログラムが停止するたびに、「データ表示」ウィンドウで値の変更を追跡することができます。
評価の結果は、「デバッグ」ウィンドウの「データ履歴」区画に一覧表示されます。最後の評価の後に評価のコンテキストが変更されると、点線が表示されます。「データ履歴」区画の履歴リストには、以前に評価した式が保持されています。「データ履歴」区画を消去するには、「データ」⇒「消去」を選択します。
エディタウィンドウで式を評価する場合は、ソース表示でターゲットの変数か式を選択した後、次のいずれかの操作を行います。
「評価」ボタンをクリックするか、「WorkShop」⇒「評価」⇒「選択」を選択して、選択された式の値を検索する
「* を評価」ボタンをクリックするか、「WorkShop」⇒「評価」⇒「ポインタとして」を選択して、ポインタ式が指すものを評価する
値は「データ履歴」区画に表示されます。式のコンテキストが変更されるたびに、「データ履歴」区画に区切り線が挿入されます。
「デバッグ」ウィンドウで式を評価するには、次の手順に従ってください。
「式」テキストフィールドに変数か式を入力またはペーストします。
検査したい式が「デバッグ」ウィンドウかエディタウィンドウに表示されている場合、式を選択してから「データ」⇒「選択項目を評価」を選択することができます。
「評価」ラジオボタンをクリックします。
「評価」ボタンをクリックするか、「データ」⇒「選択項目を評価」を選択します。
プログラムの停止中に「代入」ボタンで変数または式の値を変更できます。
「データ表示」ウィンドウでは、プログラムの実行中に式の値の変化を監視できます。ブレークポイント、ステップ、プログラムへの割り込みなどによってプログラムの実行が停止するたびに、選択した式のセットが自動的に評価されます。変化した式の値は、太字で強調表示されます。
「データ表示」ウィンドウでは、式に関する追加情報をポップアップウィンドウに表示して、管理することができます。
式の値を監視するには、次の手順に従ってください。
「ウィンドウ」⇒「データ表示」を選択するか、「デバッグ」ウィンドウの「表示」をクリックして、データ表示ウィンドウを開きます。
次のいずれかの操作で、ウィンドウに式を入力します。
「式」テキストフィールドに式を入力して、「表示」ボタンをクリックする
「データ表示」ウィンドウで「表示」⇒「新規式」を選択して「新規式」パネルのテキストフィールドに式を入力する
「データ表示」ウィンドウの中にポインタを置き、マウスの右ボタンを押して「選択された表示項目」ポップアップメニューを表示させます。
ポップアップメニューからコマンドを選択して、コンテキストと型情報の表示、現在の値と以前の値の比較、ポインタの別名の表示、配列のグラフ化を行うことができます。
呼び出しスタックとは、呼び出されて、まだ呼び出し元には戻されていない活動状態のルーチンすべてを指します。スタック区画には、関数とその引数が呼び出された順序で一覧表示されます。初期関数 (C および C++ プログラムの main() ) は「スタック」区画の最上部に、プログラムが停止した時点で実行されていた関数は「スタック」区画の最下部に配置されます。この関数を「停止位置関数」と呼びます。
「停止位置関数」は、「デバッグ」ウィンドウのデバッグステータス領域の「停止位置」ステータス表示領域に一覧表示されます (図 5-1 を参照)。「停止位置関数」のソースコードはエディタウィンドウに表示され、次に実行される行は緑色で強調表示されます。
ステータス表示領域の「評価コンテキスト」の行には、コンテキスト関数の名前が表示されます。コンテキスト関数は、デバッグ処理でシンボル名の指定に適用されるスコープの検索順序を決定します。
次のいずれかの操作を実行して、呼び出しスタックを検査します。
「上へ」ボタンをクリックするか「スタック」⇒「上へ」を選択して、スタック内を 1 レベル上に移動する
「下へ」ボタンをクリックするか「スタック」⇒「下へ」を選択して、スタック内を 1 レベル下に移動する
戻りたいフレームの隣にポインタを置いて「スタック」⇒「現フレームまでポップ」を選択し、複数のフレームを削除する
「スタック」⇒「ポップ」を選択して、停止した関数をスタックから削除する
戻りたいフレームの隣にカーソルを置いて「スタック」⇒「現フレームまでポップ」を選択し、複数のフレームを削除する
マルチスレッドプログラムが検出されると、「デバッグ」ウィンドウの「セッション/スレッド」区画が開き、プログラム内のスレッドに関する情報が表示されます。この区画では、セッションの表示とスレッドの表示を切り替えることができます。マルチスレッドプログラムの場合、現時点で選択されているプロセス内のスレッドに関する情報が一覧表示されます。現在のスレッドには、緑色の矢印が付きます。
別のスレッドのコンテキストを表示するには、次の手順に従ってください。
「スレッド」区画のスレッドをクリックします。
呼び出しスタックは、選択されたスレッドのコンテキストを反映して動的に更新されます。ソースの表示も更新されます。コンテキスト関数と停止位置関数は、新しいスレッドに対応した値になります。
「継続」をクリックして、プログラムの実行を再開します。
スレッドを非表示にするには、次の手順に従ってください。
「スレッド」区画でスレッドをクリックします。
「スレッド」⇒「選択項目を隠す」を選択します。
スレッドを表示すると管理が容易になります。非表示のスレッドをすべて表示するには、「スレッド」⇒「隠れているのを表示」を選択します。
「デバッグ」⇒「デバッグ用オプション」を選択して、デバッグのパフォーマンス、出力、言語などの新しいデフォルトを設定できます。このオプションで表示される「デバッグオプション」ダイアログボックスでは、デバッグセッションをカスタマイズしたり、デバッガ全体のデフォルト設定を変更することができます。また、環境変数と dbxenv コマンドを設定して、複数のデフォルトを設定することもできます。
デバッグセッションのカスタマイズの詳細については、『dbx コマンドによるデバッグ』を参照してください。