XL C/C++ は、ユーザーのアプリケーションをコンパイルしているときに問題に遭遇すると、 診断メッセージを出します。 ユーザーは、そのような問題を識別し、訂正する援助として、 これらのメッセージを使用することができます。
この章では、XL C/C++ が提供する主要な診断メッセージの簡潔な概要を記載します。 ユーザーのアプリケーションに関する問題を解決するのを助けることができる関連コンパイラー・オプションに関する詳細については、 『エラー検査およびデバッグのオプション』 および『リストおよびメッセージを制御するオプション』 を参照してください。
コンパイルの終了時に、 コンパイラーは、 以下の任意の条件のもとで戻りコードをゼロに設定します。
その他の場合には、コンパイラーは戻りコードを以下のいずれかの値に設定します。
戻りコード | エラー・タイプ |
---|---|
1 | -qhalt コンパイラー・オプションの設定値よりも高い重大度レベルをもつエラーが起こりました。 |
40 | オプション・エラーまたはリカバリー不能エラーが起こりました。 |
41 | 構成ファイル・エラーが起こりました。 |
250 | メモリー不足が起こりました。 コンパイラー呼び出しコマンドは、 自分が使用するメモリーをそれ以上割り振ることができません。 |
251 | シグナル受け取りエラーが起こりました。 すなわち、リカバリー不能エラーまたは割り込みシグナルが起こりました。 |
252 | ファイル未検出エラーが起こりました。 |
253 | 入出力エラー (ファイルの読み取りおよび書き込みができない) が起こりました。 |
254 | フォーク・エラーが起こりました。 新規プロセスを作成することができません。 |
255 | プロセスの実行中にエラーが検出されました。 |
診断情報は、-qlist、-qsource、-qxref、-qattr、-qreport、および -qlistopt コンパイラー・オプションの設定値に従って出力リストに作成されます。 -S オプションは、 別個のファイルにアセンブラー・リストを生成します。
アプリケーションのコンパイル中にコンパイラーがプログラミング・エラーに遭遇した場合、 コンパイラーは標準のエラー・デバイス、 および適切なコンパイラー・オプションが選択されている場合にはリスト・ファイルに診断メッセージを出します。
リストの援助によって問題の原因を突き止めるには、以下の項目を参照することができます。
- ソース・セクション (ソース・プログラムのコンテキストでのコンパイル・エラーを見つけるため)
- 属性および相互参照セクション (名前の誤ったデータ・オブジェクト、 宣言なしで使用されているデータ・オブジェクト、または一致していないパラメーターを見つけるため)
- 変換およびオブジェクトのセクション (生成されたコードが予期したとおりのものかどうかを調べるため)
見出しは、リストの主要なセクションを識別します。 見出しの先頭を簡単に見つけることができるように、不等号 「より大」(>) 記号のストリングがセクション見出しの前に付きます。
>>>>> section name
適切なコンパイラー・オプションを指定することによって、 リストに現れるセクションを選択できます。 これらのオプションに関する詳細については、 『エラー検査およびデバッグのオプション』および『リストおよびメッセージを制御するオプション』を参照してください。
リスト・ファイルには、以下の項目が含まれているヘッダー・セクションがあります。
- 以下のものから構成されるコンパイラー ID
- コンパイラー名
- バージョン番号
- リリース番号
- モディフィケーション番号
- 修正番号
- ソース・ファイル名
- コンパイル日付
- コンパイル時刻
ヘッダー・セクションは、リストに必ず存在します。 それは最初の行であり、1 度だけ出現します。 複数のコンパイル単位が存在する場合、以下のセクションは、 各コンパイル単位に対して繰り返されます。
オプション・セクションは、リストに必ず存在します。 コンパイル単位ごとに別個のセクションがあります。 このセクションは、コンパイル単位に対して有効な、指定されているオプションを示します。 この情報は、競合するオプションが指定されている場合に有用です。 -qlistopt コンパイラー・オプションを指定した場合、このセクションは、 すべてのオプションの設定値をリストします。
ソース・セクションには、行番号とファイル番号 (任意指定) の付いた入力ソース行が含まれています。 ファイル番号は、ソース行が取り出されたソース・ファイル (またはインクルード・ファイル) を示します。 メインファイルのすべてのソース行 (インクルード・ファイルからのソース行ではない) には、ファイル番号は印刷されません。 各インクルード・ファイルにはファイル番号が関連づけられており、 インクルード・ファイルからのソース行には、そのファイル番号が印刷されます。 左から、ファイル番号、その右に行番号、ソース行のテキストの順で印刷されます。 コンパイラーは、各ファイルを基準として、行に番号を付けます。 それらと関連づけられているソース行とソース番号は、 -qsource コンパイラー・オプションが有効な場合だけ印刷されます。
-qsource オプションが有効になっている場合、エラー・メッセージはソース・リスト中に混在します。 コンパイル・プロセス中に生成されるエラー・メッセージには、次のものが含まれています。
- ソース行
- エラーの列を指し示す標識の行
- エラー・メッセージ
たとえば、次のとおりです。
7 | for (i=0; i<100; i++) { 8 | for (j=0; j<100; j++) { 9 | a[i:j] = j; "loop.c", line 9.16: 1506-277 (S) Syntax error: possible missing ',' or ']'? 10 | } 11 | }
-qnosource オプションが有効になっている場合、 エラー・メッセージはソース・セクションに表示されるものすべてであり、 エラー・メッセージには以下のものが含まれます。
- 引用符で囲まれたファイル名
- エラーの行番号と列の位置
- エラー・メッセージ
たとえば、次のとおりです。
"loop.c", line 9.16: 1506-277 (S) Syntax error: possible missing ',' or ']'?
C および C++ 診断メッセージの形式は次のとおりです。
>>-15--cc-- ---nnn-- --+------------------------+--message_text->< '-(--severity_letter--) -'
コンパイル・エラーは以下のような重大度レベルをもつことがあり、 これはある種のエラー・メッセージの一部として表示されます。
デフォルトでは、重大エラー (重大度 S) を検出すると、 コンパイラーは出力ファイルを作成しないで停止します。 -qhalt オプションを使用して、別の重大度を指定すれば、重大度のより低いエラーに対して、 コンパイラーを停止させることができます。 たとえば、-qhalt=w を使用した場合、重大度 W またはそれ以上の重大度のエラーに遭遇するとコンパイラーが停止します。 この手法を使用すると、 プログラムの構文上およびセマンティック上の妥当性をチェックするのに必要なコンパイル時間を短縮することができます。 -qflag オプションを使用すると、 コンパイラーを停止させることなく重大度の低いメッセージを制限することができます。
-qreport オプションが有効になっていると、 コンパイラーは、XL C/C++ がプログラムを最適化した方法を示す変換レポートを生成します。 このセクションは、ユーザーが -qhot または -qsmp オプションによって生成された並列処理およびループ変換を表示することができるように、 元のソース・コードに対応する疑似コードを表示します。
このセクションは、コンパイル単位で使用されるエンティティーに関する情報を提供します。 これが存在するのは、-qxref または -qattr コンパイラー・オプションが有効になっている場合です。 有効なオプションに応じて、 このセクションにはコンパイル単位で使用されるエンティティーに関する以下の情報の全部または一部が入ります。
- エンティティー名
- エンティティーの属性 (-qattr が有効になっている場合)。 属性情報には、以下の詳細のいずれか、またはすべてを組み込むことができます。
- データ型
- 名前のクラス
- 名前の相対アドレス
- アラインメント
- 次元
- 配列の場合は、それが割り振り可能かどうか
- それがポインター、ターゲット、整数ポインターのいずれであるか
- それがパラメーターであるかどうか
- それが揮発性であるかどうか
- 仮引数について、その意図、 それが値であるかどうか、それが任意指定かどうか
- private、public、protected、モジュール
- エンティティーを定義、参照、あるいは変更した場所を示すための座標。 エンティティーを宣言すると、座標に $ マークが付きます。 エンティティーを初期化すると、座標に * マークが付きます。 同じ場所でエンティティーの宣言および初期化の両方を行うと、 座標に & マークが付きます。 エンティティーが設定されると、座標に @ マークが付きます。 エンティティーが参照されると、座標には何もマークが付きません。
-qxref または -qattr によって完全なサブオプションを指定すると、C および C++ はコンパイル単位内のすべてのエンティティーを報告します。 このサブオプションを指定しないと、 実際に使用しているエンティティーだけが表示されます。
XL C/C++ は、-qlist コンパイラー・オプションが有効になっている場合にのみ、このセクションを作成します。 このセクションには、ソース行番号、命令オフセット (16 進表記)、 命令のアセンブラー・ニーモニック、命令の 16 進値を示す疑似アセンブラー・オブジェクト・コード・リストが入っています。 右側には、命令のサイクル・タイムとコンパイラーの中間言語も示されます。 最後に、合計サイクル・タイム (直線的実行時間) と、 作成されたマシン・インストラクションの合計数が表示されます。 コンパイル単位ごとに別個のセクションがあります。
このセクションには、 使用されている各メイン・ソース・ファイルとインクルード・ファイルのファイル番号とファイル名を示すテーブルが含まれています。 また、インクルード・ファイルが参照されるメイン・ソース・ファイルの行番号もリストします。 このセクションは必ず存在します。
これは、各コンパイル単位のリストの最後のセクションです。 これには診断の要約が含まれていて、その単位が正常にコンパイルされたかどうかを示します。 ファイルにコンパイル単位が 1 つしか含まれていない場合は、 このセクションはリストに存在しません。
コンパイル・エピローグ・セクションは、 リストの終わりに 1 回発生するだけです。 コンパイルの完了時に、XL C/C++ はコンパイルの概要を提示します。 概要とは、読み取られたソース・レコードの数、コンパイル開始時刻、 コンパイルの終了時刻、合計コンパイル時間、合計 CPU 時間、および仮想 CPU 時間です。 このセクションは、リストに必ず存在します。
コンパイル時に -g または -qlinedebug コンパイラー・オプションを指定することは、 コンパイルされた出力にデバッグ情報を組み込むように XL C/C++ コンパイラーに指示することになります。 次に、 gdb または 他の任意のシンボリック・デバッガーを使用して、 コンパイル済みアプリケーションをステップスルーしその動作を検査することができます。