Sun WorkShop の統合デバッグ機能では、プログラムを制御しながら実行したり、停止したプログラムの状態を調べたりすることができます。Sun WorkShop を使用すると、パフォーマンスデータの収集をはじめとするプログラムの動的な実行を完全に制御することができます。
Sun WorkShop のデバッグ機能を利用すると、プログラムに障害が発生した場所の特定、変数や式の値の表示、コード内のブレークポイントの設定、プログラムの実行とトレース、マシンレベルのコマンドやその他のコマンドによるコードのデバッグなどが可能です。「dbx コマンド」ウィンドウでは、標準の dbx コマンドを使用できます。
この章は、次の各節で構成されています。
Sun WorkShop では、イベント管理機能、プロセス制御機能、データ検査機能など、幅広い機能を利用してデバッグを実行することができます。デバッグ機能には、次のものがあります。
バックグラウンドでデバッガを使って高速実行モードでプログラムを実行し、プログラムがコアダンプを出力しようとすると、デバッガが代わって処理を行う
実行の開始、停止、継続実行を行う
行または関数にブレークポイントを設定する。プログラム全体または関数内を行単位でトレースする。指定した値または式が変わるか、何らかの条件が満たされるとプログラムを停止またはトレースするウォッチポイントを設定する
C++ コード内に複数のブレークポイントまたはトレースタグを設定する。クラス間で同じ名前を持つ全メンバー関数か指定したクラスの全メンバーに設定する
同じプログラムでの以降のデバッグセッションで使用するブレークポイントを保存する
一度に 1 行ずつ、プログラムをステップ実行する。関数呼び出しをステップオーバーしたり、関数の中をステップ実行したりする。ステップ実行して関数を抜け出し、呼び出し側関数の呼び出しの後の行に進む
標本コレクタ、標本アナライザ、ループレポート、ロック lint ユーティリティを使用して、後で解析する実行時パフォーマンスデータを収集する
メモリーアクセスエラー、メモリーリーク、メモリーブロックの使用率の実行時検査機能を使って、アプリケーション内での実行時エラーを自動的に検出する
識別子の宣言と型、クラス、テンプレートの定義を調べる
プログラムが停止するたびに変数や式を調べる。時間の経過とともに変わる変数や式を監視する。呼び出しスタックを検査する。呼び出しスタック内を上下に移動する。プログラム内の関数を呼び出す
プログラムの実行中に、データグラファや「データ表示」ウィンドウを使って複雑な構造体や配列を含むプログラム変数を図に表示して調べたり、変数を監視する
マルチスレッド機能を使用したプログラムをデバッグする
修正継続機能により、ファイルの編集、同じオプションでの再コンパイル、新規コードのプログラムへの統合、継続実行を行う
C++ のサポート。仮想関数のサポート、C++ 例外のサポート、C++ テンプレートを使ったデバッグ、引数の解釈処理用の関数の多重定義の使用、デフォルト引数の使用などによってサポートする
内蔵 Korn シェルでプログラミングを行う (ksh-88 と dbx コマンド言語の違いについては、『dbx コマンドによるデバッグ』の「dbx の Korn シェル機能」を参照)
dbx との対話用の「dbx コマンド」ウィンドウとは別に、「プログラム入出力」ウィンドウを使った入出力用コマンドインタフェースを提供する
フォークしたプロセスを追跡する
デバッグ用のアプリケーションの準備として、-g または -g0 (ゼロ) オプションを指定してアプリケーションをコンパイルします。すると、オプションの働きによって、コンパイル中にデバッグ情報が生成されます。これらのオプションをメークファイルに指定する方法については、付録 B 「make ユーティリティとメークファイル」を参照してください。デバッグ用のプログラムに関する詳細は、『dbx コマンドによるデバッグ』を参照してください。
現在のプログラム、Sun WorkShop で以前に実行、デバッグしたプログラムのほか、Sun WorkShop のピックリストにない新規プログラムもデバッグすることができます 。
現在のプログラムの名前は、「デバッグ」ウィンドウのヘッダーに表示されます。ターゲットを構築すると、ターゲットと同じ名前のプログラムが (現在のディレクトリにあれば) 現在のプログラムになります。
プログラムのデバッグを開始するには、次の手順に従ってください。
デバッグの状態を選択します。
「デバッグ」⇒「高速実行モード」を選択すると、いつでもデバッグに切り替わるオプションが指定され、プログラムは通常どおりに実行されます。高速実行モードについては、「高速実行モード」を参照してください。
「デバッグ」⇒「デバッグモード」を選択するか Sun WorkShop メインウィンドウの「デバッグ」ボタンをクリックすると、デバッガの機能を活用してプログラムのデバッグを行うことができます。
デバッグするプログラムを選択します。
現在のプログラムのデバッグを開始するには、Sun WorkShop メインウィンドウの「デバッグ」ボタンをクリックします。
現在のプログラム以外のプログラムのデバッグを開始するには、次のいずれかの操作を行います。
過去に Sun WorkShop で実行またはデバッグされたプログラムをデバッグする場合
Sun WorkShop メインウィンドウまたは「デバッグ」ウィンドウのピックリストからプログラムを選択します。
ピックリストにないプログラムをデバッグする場合
「デバッグ」⇒「新規プログラム」を選択して新しいプログラムを読み込みます。
実行中の別のプロセスを接続する場合
「デバッグ」⇒「プロセスを接続」を選択します。
プログラムの実行の失敗が原因で生成されたコアダンプファイルをデバッグする場合
「デバッグ」⇒「コアファイルの読み込み」を選択します。
これで、プログラムが読み込まれ、Sun WorkShop の「デバッグ」ウィンドウが表示されます (「Sun WorkShop の「デバッグ」ウィンドウ」を参照)。
「デバッグ」ウィンドウの「開始」または「継続」ボタンをクリックするか、「実行」⇒「開始」または「実行」⇒「継続」を選択して、プログラムを実行します。
デバッグを開始する前に、引数などの実行パラメータ、実行ディレクトリ、環境変数などを変更できます。「実行時の引数の変更」を参照してください。
Sun WorkShop では、直観的で使いやすいインタフェースが用意されているため、デバッグ作業が簡単になっています。デバッグを開始すると、「デバッグ」ウィンドウとテキストエディタウィンドウ (「エディタウィンドウ」を参照) が表示されます。カスタムボタンを作成すると、カスタムボタンも表示されます。
「デバッグ」ウィンドウ (図 5-1) とそこからアクセス可能なウィンドウで、ほとんどのデバッグ操作を実行することができます。
「デバッグ」メニュー |
プログラム、プロセス、またはコアファイルのデバッグ、オプションのカスタマイズ、セッションの管理を行います。 |
「実行」メニュー |
コード行を実行またはシングルステップで実行します。 |
「データ」メニュー |
「デバッグ」ウィンドウで選択された項目を評価・変更します。 |
「スレッド」メニュー |
スレッド/セッション区画でスレッドの表示・非表示を切り替えます。 |
「スタック」メニュー |
スタックを上下に移動したりポップアップさせたりします。 |
「検査」メニュー |
実行時検査機能を有効にして使用します。 |
「ウィンドウ」メニュー |
「ブレークポイント」ウィンドウ、「データ表示」ウィンドウ、他の「デバッグ」ウィンドウを開きます。 |
「ヘルプ」ウィンドウ |
オンラインヘルプを表示します。 |
「開始」ボタン |
始めからプログラムを実行します。 |
「上へ」ボタン |
呼び出しスタックを 1 つ上の関数に移動します。 |
「下へ」ボタン |
呼び出しスタックを 1 つ下の関数に移動します。 |
「継続」ボタン |
現在の位置からプログラムを実行します。 |
「割り込み」ボタン |
プログラムに割り込みます。dbx コマンドの Ctrl + C と同じ機能です。 |
「ステップイン(step)」ボタン |
関数をステップ実行します。 |
「ステップオーバー (next)」ボタン |
現在の関数を 1 行ステップオーバーします。 |
「ステップアウト (step out)」ボタン |
現在の関数の終わりまで実行します。 |
「修正 (fix)」ボタン |
変更されたファイルをすべて再コンパイルし、デバッグを続行します。 |
デバッグステータス表示領域 |
プログラムの状態に関する情報を表示します。 |
「データ履歴」区画 |
式の評価、型の照会、値の変更履歴を表示します。 |
スレッド/セッション区画 |
「スレッド」ラジオボタンが選択されている場合、マルチスレッドプログラムのスレッドに関する情報を一覧表示します。 |
「スタック」区画 |
呼び出しスタックの現在の状態を表示します。別のスタックフレームに移動することができます。 |
「dbx コマンド」ウィンドウ |
dbx コマンドの入力と出力の結果を表示できます (「デバッグオプション」ダイアログボックスの「ウィンドウレイアウト」カテゴリで「dbx コマンドウィンドウを別ウィンドウとして表示」が「いいえ」に設定されている場合のみ)。 |
メッセージ表示領域 |
ウィンドウでの操作に関するメッセージを表示します。 |
Sun WorkShop の統合テキストエディタ (vi、GNU Emacs、XEmacs) では、デバッグ機能を活用しながらプログラムのソースコードを編集することができます。
ソースコードが表示されているテキストエディタウィンドウから、基本的なデバッグ操作を実行することができます。図 5-2に、ソースコードを表示しているデバッグ処理中の XEmacs エディタウィンドウを示します。エディタウィンドウに表示したソースコードは、変更可能です。デバッグセッションを開始すると、エディタウィンドウにプログラムのメインルーチンが自動的に表示されます。WORKSHOP リソースファイルを編集すると、エディタウィンドウに表示されるソースコードの行 (現在の関数やブレークポイントなど) の強調表示に使用する色を変更できます。「エディタウィンドウの強調色」を参照してください。
エディタウィンドウのツールバーでは、通常のデバッグ操作 (特にソースの構成要素を引数として使用するもの) が可能です。また、Sun WorkShop の別の部分からのボタンも用意されています。
Sun WorkShop セッションのエディタの選択については、「テキストエディタの選択と使用方法」を参照してください。
「カスタムボタン」ウィンドウには、「ボタン編集」ウィンドウを使用して作成したカスタムボタンや dbx コマンドボタンが表示されます。カスタムボタンを作成すると、Sun WorkShop の起動時に、自動的に「カスタムボタン」ウィンドウが開きます。
旧バージョンのデバッガを使用している場合、.dbxrc ファイルにカスタムボタンを作成するコマンドが含まれていると、これらのボタンが自動的に「カスタムボタン」ウィンドウに表示されます。
「カスタムボタン」ウィンドウは自由にサイズを変更でき、好きな位置に配置することができますが、単独に閉じる必要があります。
「ボタン編集」ウィンドウ (図 5-3 を参照) を使用すると、「カスタムボタン」ウィンドウにボタンを追加したり、「カスタムボタン」ウィンドウのボタンを編集または削除することができます。「カスタムボタン」ウィンドウに追加したボタンは、.dbxrc ファイルではなく、Sun WorkShop オプションファイルに格納されます。「ボタン編集」ウィンドウでは、.dbxrc ファイルにボタンを追加したり、.dbxrc ファイルのボタンを削除することはできません。
「ボタン編集」ウィンドウを開くには、「デバッグ」ウィンドウで「ウィンドウ」⇒「ボタン編集」を選択します。
ボタン一覧から「カスタムボタン」ウィンドウにボタンを追加することができます。ボタン一覧にないボタンを追加したい場合は、そのボタンをインポートするか (「「ボタン編集」ウィンドウへの組み込みボタンの追加」を参照)、「ボタン編集」ウィンドウの「作成/編集ボタン」パネルを使用してボタンを作成します (図 5-3「「ボタン編集」ウィンドウへのボタンの追加」を参照)。
「ボタン編集」ウィンドウにボタンをインポートするには、次の手順に従ってください。
「組み込みボタン」をクリックして、ボタンパレットを表示します。
ボタンパレットの組み込みボタン一覧に、次の項目が表示されます。
「デバッグ」ウィンドウのツールバーにあるすべてのボタン
メニューからしか使用できない機能にアクセスするためのボタン (「ブレークポイント」ウィンドウを開くための「ブレークポイント」ボタンなど)
ツールバーまたはメニュー上で使用できない機能を提供するためのいくつかのボタン (局所変数を出力するための「ダンプ」ボタンなど)
「ボタン編集」ウィンドウにインポートしたいボタンを選択して、「了解」をクリックします。
「ボタン編集」ウィンドウのボタン一覧に、選択したボタンが追加されます。
「ボタン編集」ウィンドウにボタンを追加するには、次の手順に従ってください。
ボタンの上にテキストを表示するか、ボタンをアイコンで表すかを決定します。
テキストを表示する場合は、「テキスト」ラジオボタンをクリックして、テキストフィールドに表示したいテキストを入力します。
アイコンを表示する場合は、「アイコン」ラジオボタンをクリックして、アイコンが格納されているファイル名を入力します。
「. . .」ボタンをクリックして、アイコンファイルを選択するためのダイアログボックスを開きます。アイコンファイルとして選択できるのは、.xpm 形式のファイルのみです。Sun WorkShop のツールバーのアイコンは 20 × 20 ピクセルで設定されます。また、Sun WorkShop パレットの色以外は使用できません。
.xpm ファイルの作成には、CDE アプリケーションの dticon を使用できます。このほかの多くのグラフィックプログラムでも、ファイルを .xpm 形式で保存することができます。
「dbx コマンド」テキストフィールドに、ボタンがクリックされたときに実行される dbx コマンドを入力します。
使用可能なコマンドを確認したい場合は、「dbx コマンド」ウィンドウに commands と入力します。
引数を伴う dbx コマンドを実行するボタンを追加したい場合は、「ボタンを押したときに実行されるコマンドの対象:」領域のラジオボタンを選択して、コマンドに追加するテキストを指定する必要があります。
「なし」ラジオボタン (デフォルト) - テキストは追加されない
「選択されているテキスト」ラジオボタン - 現在選択されている Sun WorkShop テキストが追加される
「ファイル:選択されている行の番号」ラジオボタン - ファイル名と行番号が追加される
引数をコマンドに追加するのではなく、コマンドに引数を埋め込む場合は、コマンド文字列に %s と入力して、引数の位置を指定します。
たとえば、「dbx コマンド」テキストフィールドに次のように入力した場合、
stop at %s -temp
「ファイル:選択されている行の番号」ラジオボタンが選択されているとき、main.cc ファイルの 25 行目が選択されている状態でこのボタンをクリックすると、次のコマンドが実行されます。
stop at "main.cc":25 -temp
このコマンド文字列には、%s は 1 つしか取り込めません。また、エスケープ文字列を取り込むこともできません。たとえば、stop %%s -temp と入力すると、stop %"main.cc":25 となります。
「追加」をクリックすると、ボタン一覧にボタンが追加されます。
「ボタン編集」ウィンドウのボタン一覧にあるボタンを「カスタムボタン」ウィンドウに追加することができます。
「カスタムボタン」ウィンドウに新しいボタンを追加するには、「適用」をクリックします。
dbx button コマンドでも、「カスタムボタン」ウィンドウにボタンを追加することができます。
既存のボタンを編集するには、次の手順に従ってください。
ボタン一覧から編集するボタンを選択します。
「作成/編集ボタン」パネルのテキストフィールドとラジオボタンを使用して、ボタンの属性を編集します。
「「ボタン編集」ウィンドウへのボタンの追加」を参照してください。
「変更」をクリックして、ボタンに新しい属性を適用します。
「適用」をクリックして、「カスタムボタン」ウィンドウのボタンを編集したボタンに置き換えます。
「ボタン編集」ウィンドウのボタン一覧で、「カスタムボタン」ウィンドウ内のボタンの位置を上下に変更することができます。
ボタンを再配置するには、次の手順に従ってください。
ボタン一覧から、移動するボタンを選択します。
「上に移動」または「下に移動」をクリックして、ボタンの位置を「カスタムボタン」ウィンドウに表示される位置に調整します。
「適用」をクリックすると、「カスタムボタン」ウィンドウ内の新しい位置にボタンが表示されます。
「ボタン編集」ウィンドウのボタン一覧からボタンを削除すると、「カスタムボタン」ウィンドウからボタンを削除することができます。
ボタンを削除するには、次の手順に従ってください。
ボタン一覧から、削除するボタンを選択します。
「削除」をクリックして、ボタン一覧からボタンを削除します。
「適用」をクリックすると、「カスタムボタン」ウィンドウからボタンが削除されます。
dbx の button コマンドでも、「カスタムボタン」ウィンドウからボタンを削除することができます。
「ボタン編集」ウィンドウでは、.dbxrc ファイルに格納されているボタンを永久に削除することはできません。「ボタン編集」ウィンドウを使用して削除しても、次回のデバッグセッションでは再度表示されます。このようなボタンは、.dbxrc ファイルを編集すれば、削除することができます。
以降の節では、プログラムのデバッグを開始した後の基本的な操作手順について説明します。詳細については、『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 コマンドによるデバッグ』を参照してください。
各プログラムを独立したデバッグセッションに接続し、一度に複数のプログラムをデバッグすることができます。同時にデバッグできるプログラムには、次のようなものがあります。
プロセスとそのプログラムがフォークする子プロセス
クライアント/サーバープログラム
2 つの関連するプログラム
複数のセッションを同時デバッグする場合、一度に表示できるのは 1 つのセッションのコンテキストだけです。「活動状態セッション」ダイアログボックス (図 5-6) にはデバッグセッションがすべて一覧表示されるので、自由にセッションを切り替えることができます。現在のプログラムは、矢印で示されています。別のセッションに切り替えると、新しいセッションのコンテキストに合わせて、「デバッグ」ウィンドウ、エディタウィンドウ、「dbx コマンド」ウィンドウなどの表示が変更されます。
複数のセッションをデバッグすると、大量のリソースが消費されるため、システムの処理速度が低下することがあります。「デバッグ」ウィンドウで、現在活動状態になっているセッションの数を確認して、不要なセッションがあれば、「活動状態セッション」ダイアログボックスの「セッション終了」または「切り離す」をクリックして削除してください。
プログラムのデバッグ時に、別のプログラムのデバッグを要求すると、現在プログラムをデバッグ中であるというメッセージが表示されます。ここで、現在のセッションを終了または切り離して新しいデバッグセッションを読み込むか、現在のセッションを再利用するか、両方のセッションをデバッグするかを選択してください。両方のプログラムを同時にデバッグしたい場合以外は、両方のセッションのデバッグを選択しないでください。
Sun WorkShop セッションでは、任意の数のプログラムをデバッグできます。デバッグされているプログラムのリストは、「活動状態セッション」ダイアログボックスと「デバッグ」ウィンドウのセッション区画に記録されるので、この中から任意のプログラムを選択して処理を中止したり、切り離したり、終了させることができます。また、プログラムを切り替えることもできます。なお、現在のプログラムは、矢印で示されています。
「活動状態セッション」ダイアログボックスを使用してセッションを管理するには、次の手順に従ってください。
「デバッグ」ウィンドウで、「デバッグ」⇒「セッション管理」を選択します。
「活動状態セッション」ダイアログボックスが表示されます。
スクロールリストからプログラムを選択します。
「現対象にする」 |
選択されたプログラムを現在のプログラムにします。選択されたプログラムのコンテキストに合わせて、スタック区画やエディタウィンドウなどの表示が変更されます。 |
「終了」 |
デバッグセッションを終了しないで、プログラムを終了します。 |
「切り離す」 |
選択されたプログラムまたはデバッグセッションを終了しないで、プログラムを切り離します。 |
「セッション終了」 |
選択されたプログラムを終了し、デバッグセッションを削除します。セッションが 1 つしかない状態で、このボタンをクリックすると、セッションが削除され、「デバッグ」ウィンドウにデバッグセッションがないことが表示されます。 |
「閉じる」をクリックします。
「デバッグ」ウィンドウのセッション区画のセッションを管理するには、次の手順に従ってください。
「セッション/スレッド」区画が開かれていない場合は、サッシをスタック区画の上にドラッグして、「セッション/スレッド」区画を開きます。
スレッド区画が表示されている場合は、区画の上部にある「セッション」ラジオボタンをクリックします。
複数のプログラムをデバッグする場合は、システムの処理速度がかなり低下する恐れがあります。不要になったセッションは、必ず中止するか、切り離すか、終了してください。
複数のセッションをデバッグすると、大量のリソースが消費されるので、システムの処理速度が低下することがあります。デバッグセッションが不要になった場合は「セッション終了」ボタンで実行中のプログラムを切り離すか、読み込まれているプロセスを終了します。デバッグセッションは保持されません。
現在のデバッグセッションを終了するには、次の手順に従ってください。
「デバッグ」ウィンドウで、「デバッグ」⇒「セッション管理」を選択します。
リストから、終了したいセッションを選択します。
「セッション終了」をクリックします。
「終了」コマンドを使用すると、現在のプロセスのデバッグは終了しますが、デバッグセッションは保持されたままです。このように、セッションがすでに起動しているため、最初にプログラムを読み込んだときよりも短時間で別のプログラムを読み込むことができます。ただし、デバッグセッションを保持したままにしておくと、スワップ領域が占有されます。スワップ領域が不足した場合は、「セッション終了」を使用して、プログラムを終了し、デバッグセッションも終了してください。
プロセスが子プロセスをフォークした場合、デバッグ対象を親プロセスのみ、子プロセスのみ、またはその両方に指定することができます。また、フォークしたプロセスからすべてのブレークポイントを削除しないように設定することもできます。
フォークしたプロセスでは、コレクタは使用できません。
実行時に常に同じデバッグ処理を行う場合、デフォルトの動作を指定しておくと、ダイアログボックスでの指定を省略できます。
フォークされるプロセスにデフォルト値を設定するには、次の手順に従ってください。
「デバッグ」ウィンドウで、「デバッグ」⇒「デバッグ用オプション」を選択します。
「カテゴリ」⇒「フォークとスレッド」を選択します。
「親」 |
フォークされたプロセスを無視し、親プロセスをデバッグします (デフォルト)。 |
「子」 |
フォークされたプロセス (子プロセス) をデバッグします。現在のプロセスのプロセス ID は、子プロセスのプロセス ID になります。このとき、親プロセスは切り離されているようにみえますが、実際には実行を継続しています。また、子プログラムは接続されているようにみえますが、実際には一時停止しています。子プロセスを実行するには、「実行」または「ステップイン (step)」を使用します。 |
「両方」 |
子プロセスをデバッグするための第 2 のデバッグセッションを開始し、現在のセッションとします。親プロセスのデバッグセッションも、実行中プロセスとして保持されます。子プロセスは、接続されているようにみえますが、一時停止しています。 |
「ユーザーに問い合わせる」 |
フォークが検出されるたびに、親プロセスと子プロセスのいずれか一方または両方を選択するダイアログボックスが表示されます。また、デバッグごとにプログラムの状態を調べて、どのフォークプロセスをデバッグするかを選択することができます。 |
「了解」をクリックして、現在のセッションに選択内容を適用するか、「デフォルトとして保存」をクリックした後「了解」をクリックして、新しいデフォルト値として保存します。
プロセスが fork() を実行するたびに、選択した処理が実行されます。
新しいフォークで別のプロセスが実行されない場合に、親プロセスのブレークポイントを子プロセスが継承できるようにするには、次の手順に従ってください。
「デバッグ」ウィンドウで、「デバッグ」⇒「デバッグ用オプション」を選択します。
「カテゴリ」⇒「フォークとスレッド」を選択します。
親プロセスのブレークポイントを継承する子プロセスのチェックボックスをクリックして、この子プロセスを有効にします。
「了解」をクリックして、現在のセッションに選択内容を適用するか、「デフォルトとして保存」をクリックした後「了解」をクリックして、選択内容を新しいデフォルト値として保存します。
高速実行モードはデバッグ機能の 1 つです。このモードでは、プログラムを通常の状態で実行しながら、いつでも処理を引き継ぐことができるように、バックグラウンドでデバッガが待機しています。プログラムが異常終了しても、コアダンプが出力される前にデバッガがプログラムを保存します。
できるだけ速くプログラムを実行したいが、まだデバッグする必要があるという場合は、デバッガの開始時に高速実行モードを選択してください。「デバッガ」ウィンドウが表示されますが、プログラムはシェルから実行されているときとまったく同様に実行されます。このとき、プログラムのシンボルは読み込まれません。
プログラムを終了するような条件が検出されると、デバッガはデバッグモードに切り替わり、プログラムのシンボルが読み込まれます。このとき、多少の遅延が発生しますが、プログラムを実行しながらデバッグ機能を利用することができます。
高速実行モードでプログラムを実行している場合は、ブレークポイントに達したときや「割り込み」ボタンをクリックして手動で実行に割り込みをかけたときなど、実行に割り込みがあったときにいつでもデバッグモードに切り替えることができます。
高速実行モードには、次のような利点があります。
プログラムでセグメント例外やその他の異常状態が検出されると、プログラムが異常終了する前に Sun WorkShop が割り込みます。このため、プログラムを実行しながらデバッグ機能を完全に利用できます。高速実行モードを使用せずにプログラムを実行した場合は、Sun WorkShop がプログラムを終了するので、限定されたデバッグ操作のみでコアファイルをデバッグしなければなりません。
処理のどの時点でもプログラムに割り込むことができ、自動的にデバッガに制御が渡されるので、ブレークポイントの設定、データの監視、ソースコード内のブラウズなどを行うことができます。デバッグ機能を利用するために、プログラムを再起動する必要はありません。
高速実行モードで実行する場合は、プログラムは高速で実行されますが、必要に応じて、すべてのデバッグ機能を利用できます。
「デバッグ」ウィンドウを初めて開くときにだけ、遅延が起こります。2 度目以降は、シンボルテーブルは読み込まれません。
プログラムがクラッシュしたり、コアダンプを出力したりすることはありません。これは、デバッガがプログラムを停止させるためです。
クラッシュしそうなプログラムに対して、すべてのデバッガ機能を使用することができます。コアファイルに接続する場合に使用できるデバッガ機能は限定されています。
デバッガが、クラッシュしそうなプログラムの制御を受け取ると、関数呼び出しをポップして戻ることができます。
高速実行モードは、次のような場合に使用します。
デバッグが済んでいると考えられる場合
シンボルの読み込みに時間をかけたくない場合
修正した個所だけをテストしたい場合
デバッグモードと高速実行モードを切り替えながらプログラムをデバッグすることによって、それぞれの機能の長所を活用できます。
実行またはデバッグするプログラムを選択するたびに、高速実行モードとデバッグモードのどちらでプログラムを実行するかを選択できます。
Sun WorkShop のメインウィンドウまたは「デバッグ」ウィンドウの「デバッグ」メニューを使って、現在のプログラムの、高速実行モードとデバッグモードを切り替えることができます。
プログラムが高速実行モードで起動するようにデフォルトを変更するには、Sun WorkShop のメインウィンドウで「オプション」⇒「デバッグ用オプション」を選択した後、「デバッグオプション」ウィンドウの「カテゴリ」リストから「デバッグ性能」を選択し、「デフォルトとして保存」をクリックします。
プログラムに変更を加え、その変更が正しく動作するものと仮定します。プログラムを再構築した後、最小のオーバーヘッドでプログラムが実行されるように、「デバッグ」メニューから「高速実行モード」を選択します。Sun WorkShop の起動後、はじめてプログラムを実行またはデバッグする場合は、「デバッグ」ウィンドウが開くのに、わずかな遅延が生じます。
プログラムを開始するには、「開始」ボタンをクリックするか、「デバッグ」ウィンドウで「実行」⇒「開始」を選択します。プログラムはセグメント例外が見つかるまで、正常に実行されます。
プログラムが終了して、コアダンプを出力する前に、Sun WorkShop はデバッグモードに切り替わり、プログラムのシンボルを読み込みます。これで、Sun WorkShop のデバッグ機能をすべて利用でき、デバッグモードでデバッグを開始したときと同じようにプログラムをデバッグできるようになります。ここで、変更、修正、継続実行の過程を経て、最終的にプログラムを再構築します。
プログラムを実行する前に、再び高速実行モードを選択します。
今回は一時停止はないものの、プログラムが無限ループに入ったようです。「割り込み」ボタンを押すと、プログラムが停止して、デバッグ用のシンボルが読み込まれます。データの値の確認、ブレークポイントの設定など、必要なデバッグ操作を行ってバグを追跡します。
さらにプログラムを再構築し、高速実行モードを使用可能にして、プログラムを再び実行します。これで、プログラムは問題なく実行されるようになります。
現在 Sun WorkShop の制御下にあるすべてのプログラムを終了し、「デバッグ」ウィンドウをすべて閉じるには、「デバッグ」ウィンドウで「デバッグ」⇒「デバッグを終了」を選択します。
Sun WorkShop の制御下にあるプロセスを終了しないで「デバッグ」ウィンドウを閉じるには、「デバッグ」⇒「閉じる」を選択します。この場合、Sun WorkShop の制御下にあるプロセスは実行を継続し、メモリーと CPU 時間を消費し続けます、また Sun WorkShop はこれらのプロセスのデータを格納し続けます。