日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS
|
目次 | 索引 |
1.2.2 デバッグのためのプログラムのリンク |
例 1-2 は,FORMS.EXE という C プログラムをリンクする方法を示しています。このプログラムは FORMS.C と INVENTORY.C という 2 つのソース・モジュールで構成されます。 FORMS.C はメイン・プログラム・モジュールです。どちらのソース・モジュールも /DEBUG 修飾子を使用してコンパイルされています ( 例 1-1 を参照)。
例 1-2 /DEBUG 修飾子を使用したプログラムのリンク |
---|
$ LINK/DEBUG FORMS,INVENTORY |
例 1-2 では,LINK コマンドの /DEBUG 修飾子は,リンクされているオブジェクト・モジュールに含まれているすべてのシンボル情報を実行可能イメージに含むようにリンカに要求します。大部分の言語では,インクルードするすべてのオブジェクト・モジュールを LINK コマンドに指定しなければなりません。 LINK コマンドを使用してシンボル情報を制御する方法については, 第 5.1.3 項 を参照してください。
Alpha システムおよび Integrity システムでは,/DSF 修飾子を使用してリンクされたプログラムをデバッグできるようになりました ( したがって,別のデバッグ・シンボル・ファイルが作成されます )。 LINK コマンドに /DSF 修飾子を指定すると,リンカはシンボル情報を格納するために別の .DSF ファイルを作成します。このため,これまでより柔軟なデバッグ・オプションを選択できます。このようなプログラムをデバッグするには,次のことが必要です。
次の例を参照してください。
$ CC/DEBUG/NOOPTIMIZE TESTPROGRAM $ LINK/DSF=TESTDISK:[TESTDIR]TESTPROGRAM.DSF TESTPROGRAM $ DEFINE DBG$IMAGE_DSF_PATH TESTDISK:[TESTDIR] $ DEBUG/KEEP TESTPROGRAM |
個別のシンボル・ファイルがあるプログラムのデバッグの詳細については, 第 5.1.5 項 を参照してください。/DSF 修飾子の使い方については,『OpenVMS Linker Utility Manual』を参照してください。
実行可能なイメージにシンボル情報が渡されることに加え,LINK/DEBUG コマンドを使用すると,作成されたイメージを DCL の RUN コマンドで実行する場合,イメージ・アクティベータがデバッガを起動します。 ( この起動方法については, 第 1.6 節 を参照してください。)
コマンド修飾子 /DEBUG を使用してイメージのコンパイルとリンクを行った場合でも,そのイメージをデバッガの制御下に置かずに通常どおりに実行することができます。それには DCL の RUN コマンドで /NODEBUG 修飾子を使用してください。次に例を示します。
1.2.3 LINKコマンドとRUNコマンドによるデバッガ起動の制御
$ RUN/NODEBUG FORMS |
エラーがないと思われる場合は,この方法で簡単にプログラムをチェックすることができます。デバッガが必要とするデータは実行可能なイメージ内の領域を占有しますので,プログラムが正常であると考えられるときは /DEBUG 修飾子を使用しないで,もう一度プログラムをリンクしてください。その結果,デバッグ・シンボル・テーブルにトレースバック・データだけを持ったイメージが作成され,使用するディスク領域を節約することができます。
LINK コマンドと RUN コマンドの修飾子でデバッガの起動を制御する方法を 表 1-1 に要約します。 LINK コマンドの /[NO]DEBUG 修飾子と /[NO]TRACEBACK 修飾子は,デバッガの起動だけでなく,デバッグ時に提供されるシンボル情報の最大レベルにも影響しますので注意してください。
LINK コマンド修飾子 | デバッガなしの プログラム実行 |
デバッガありの プログラム実行 |
使用可能な最大シンボル 情報2 |
---|---|---|---|
/DEBUG 1 | RUN/NODEBUG | RUN | Full |
なしまたは
/TRACEBACK または /NODEBUG 3 |
RUN | RUN/DEBUG | トレースバックのみ 4 |
/NOTRACEBACK | RUN | RUN/DEBUG 5 | なし |
/DSF 6 | RUN | DEBUG/KEEP 7 | すべて |
/DSF 6 | RUN | DEBUG/SERVER 7 | すべて |
1.3 保持デバッガでのプログラムのデバッグ |
OpenVMS デバッガは保持デバッガで実行できます。その場合には,同じプログラムを何度も再実行することができ,また,別のプログラムを実行することもできます。そのためにデバッグ・セッションを終了する必要はありません。この節では,次の操作方法について説明します。
この項では,DCL レベル ($) から保持デバッガを起動して,そのあとでプログラムをデバッガの制御下に置く方法について説明します。その他の起動方法については, 第 1.6 節 および 第 1.7 節 で説明します。
第 1.3.3 項 で説明する再実行機能と 第 1.3.4 項 の実行機能を使用するには,ここで説明する方法に従って保持デバッガを起動してください。
注意 次の問題点または制限事項は保持デバッガ固有のものです。
|
保持デバッガを起動して,プログラムをデバッガの制御下に置くには,次の手順に従ってください。
$ DEBUG/KEEP |
デバッガが起動するとそのバナーが表示され,ユーザ定義の初期化ファイルが実行される (
第 13.2 節 を参照 )。表示された DBG> プロンプトは, 第 2.1 節 で説明する方法でデバッガ・コマンドを入力できるようになったことを示す。
DBG> RUN FORMS %DEBUG-I-INITIAL,Language: C, Module: FORMS DBG> |
表示されているメッセージは,このデバッガ・セッションがCプログラム用に初期化されており,メイン・プログラム単位(イメージ転送アドレスを持ったモジュール)の名前がFORMSであることを示しています。初期化によって言語固有のデバッガ・パラメータが設定されます。これらのパラメータは,デバッガが名前や式を解析する方法や,デバッガの出力の書式などを制御します。言語固有のパラメータについての詳しい説明は, 第 4.1.9 項 を参照してください。
メイン・プログラム・ユニットを起動するときや,特定のプログラムで何らかの初期化コードを起動するときに,(一時的なブレークポイントを設定することにより) デバッガはプログラムの実行を中断します。その場合,デバッガは次のメッセージを表示します。
%DEBUG-I-NOTATMAIN, Type GO to reach main program |
これらのプログラム ( たとえば Ada プログラム ) では,一時的なブレークポイントで完全なシンボル情報を使用して,初期化コードをデバッグすることができます。詳細については, 第 14.3 節 を参照してください。
第 2 章 で説明されているように,これでプログラムをデバッグすることができます。
◆引数が必要なプログラムのRUNおよびRERUNコマンド・オプション
プログラムによっては,引数が必要なものもあります。この節では,デバッガの RUN コマンドと RERUN コマンドの使用方法,および /ARGUMENTS 修飾子と /COMMAND 修飾子でデバッガ制御を行う場合に,このようなプログラムを実行する方法について説明します。
保持デバッガでデバッガを起動した後,RUN コマンドにイメージ名を入力するか,または RUN/COMMAND コマンドと DCL フォーリン・コマンドを使用して,デバッグするイメージを指定できます。DCL フォーリン・コマンドを指定するには,RUN コマンドの /COMMAND 修飾子を使用します。
RUN コマンドと RERUN コマンドの /ARGUMENTS 修飾子には,引数リストを指定できます。
次のデバッガ・セッションの例には,複数の方法が示されています。デバッグするプログラムは echoargs.c であり,入力引数を端末に表示するプログラムです。
#include <stdio.h> main(int argc, char *argv[]) { int i; for (i = 0; i < argc; i++) printf("%s\n", argv[i]); } |
このプログラムを,次のようにコンパイル,リンクします。
$ cc/debug/noopt echoargs.c $ link/debug echoargs |
$ ECHO == "$ sys$disk:[]echoargs.exe" |
保持デバッガを起動します。次の例のデバッガ・セッションでは,引数を渡す方法として 3 種類の方法を紹介しています。
◆/COMMAND と /ARGUMENTS を指定した RUN
デバッガ・セッションのこのセクションでは,デバッガの RUN コマンドに /COMMAND 修飾子と /ARGUMENTS 修飾子を指定する方法について説明します。 /COMMAND 修飾子は,DCL フォーリン・コマンド echo を指定します。/ARGUMENTS 修飾子は引数 fa sol la mi を指定します。最初の GO コマンドは echoargs.exe の初期化コードを実行します。その後,デバッガはプログラムの起動時に一時的なブレークポイントでプログラムの実行を中断します。2 番目の GO コマンドは echoargs.exe を実行します。これは引数を画面に正しく表示します。
$ DEBUG/KEEP Debugger Banner and Version Number DBG> RUN/COMMAND="echo"/ARGUMENTS="fa sol la mi" %DEBUG-I-NOTATMAIN,Language: C, Module: ECHOARGS %DEBUG-I-NOTATMAIN,Type GO to reach main program DBG> GO break at routine ECHOARGS\main 1602: for (i = 0; i < argc; i++) DBG> GO _dsa1:[jones.test]echoargs.exe;2 fa sol la mi %DEBUG-I-EXITSTATUS,is '%SYSTEM-S-NORMAL, Normal successful completion' |
デバッガ・セッションのこのセクションでは,RERUN コマンドの /ARGUMENTS 修飾子を使用して,新しい引数 fee fii foo fum によって同じイメージを再実行する方法を示します (/ARGUMENTS 修飾子を指定しなかった場合には,デバッガは前に使用した引数を使用してプログラムを再実行します)。
最初の GO コマンドは echoargs.exe の初期化コードを実行します。そのあと,デバッガはプログラムの起動時に一時的なブレークポイントでプログラムの実行を中断します。 2 番目の GO コマンドは echoargs.exe を実行します。これは引数を画面に正しく表示します。
DBG> RERUN/ARGUMENTS="fee fii foo fum" %DEBUG-I-NOTATMAIN,Language: C, Module: ECHOARGS %DEBUG-I-NOTATMAIN,Type GO to reach main program DBG> GO break at routine ECHOARGS\main 1602: for (i = 0; i < argc; i++) DBG> GO _dsa1:[jones.test]echoargs.exe;2 fee fii foo fum %DEBUG-I-EXITSTATUS,is '%SYSTEM-S-NORMAL, Normal successful completion' |
デバッガ・セッションのこのセクションでは,RUN コマンドを使用して echoargs の新しいイメージを起動し,/ARGUMENTS 修飾子を使用して引数 a b c を指定します。
最初の GO コマンドは echoargs.exe の初期化コードを実行します。そのあと,デバッガはプログラムの起動時に一時的なブレークポイントでプログラムの実行を中断します。 2 番目の GO コマンドは echoargs.exe を実行します。これは引数を画面に正しく表示します。
DBG> RUN/ARGUMENTS="a b c" echoargs %DEBUG-I-NOTATMAIN,Language: C, Module: ECHOARGS %DEBUG-I-NOTATMAIN,Type GO to reach main program DBG> GO break at routine ECHOARGS\main 1602: for (i = 0; i < argc; i++) DBG> GO _dsa1:[jones.test]echoargs.exe;2 a b c %DEBUG-I-EXITSTATUS,is '%SYSTEM-S-NORMAL, Normal successful completion' DBG> quit |
デバッガのRUNコマンドについては,次の制限事項に注意してください。
デバッガ・セッション中にプログラムの実行が正常に終了すると,次のメッセージが表示されます。
%DEBUG-I-EXITSTATUS,is '%SYSTEM-S-NORMAL, Normal successful completion') |
このときユーザには次のオプションがあります。
目次 | 索引 |
|