XL C/C++ コンパイラー診断エイド

コンパイルおよび戻りコード
XL C/C++ コンパイラー・リスト
ヘッダー・セクション
オプション・セクション
ソース・セクション
エラー・メッセージの形式
変換レポート・セクション
属性および相互参照セクション
オブジェクト・セクション
ファイル・テーブル・セクション
コンパイル単位エピローグ・セクション
コンパイル・エピローグ・セクション
コンパイル済みアプリケーションのデバッグ

XL C/C++ は、ユーザーのアプリケーションをコンパイルしているときに問題に遭遇すると、 診断メッセージを出します。 ユーザーは、そのような問題を識別し、訂正する援助として、 これらのメッセージを使用することができます。

この章では、XL C/C++ が提供する主要な診断メッセージの簡潔な概要を記載します。 ユーザーのアプリケーションに関する問題を解決するのを助けることができる関連コンパイラー・オプションに関する詳細については、 『エラー検査およびデバッグのオプション』 および『リストおよびメッセージを制御するオプション』 を参照してください。

コンパイルおよび戻りコード

コンパイルの終了時に、 コンパイラーは、 以下の任意の条件のもとで戻りコードをゼロに設定します。

その他の場合には、コンパイラーは戻りコードを以下のいずれかの値に設定します。

戻りコード エラー・タイプ
1 -qhalt コンパイラー・オプションの設定値よりも高い重大度レベルをもつエラーが起こりました。
40 オプション・エラーまたはリカバリー不能エラーが起こりました。
41 構成ファイル・エラーが起こりました。
250 メモリー不足が起こりました。 コンパイラー呼び出しコマンドは、 自分が使用するメモリーをそれ以上割り振ることができません。
251 シグナル受け取りエラーが起こりました。 すなわち、リカバリー不能エラーまたは割り込みシグナルが起こりました。
252 ファイル未検出エラーが起こりました。
253 入出力エラー (ファイルの読み取りおよび書き込みができない) が起こりました。
254 フォーク・エラーが起こりました。 新規プロセスを作成することができません。
255 プロセスの実行中にエラーが検出されました。

注:
戻りコードは、ランタイム・エラーに対しても表示されることがあります。

XL C/C++ コンパイラー・リスト

ヘッダー・セクション
オプション・セクション
ソース・セクション
エラー・メッセージの形式
変換レポート・セクション
属性および相互参照セクション
オブジェクト・セクション
ファイル・テーブル・セクション
コンパイル単位エピローグ・セクション
コンパイル・エピローグ・セクション

診断情報は、-qlist-qsource-qxref-qattr-qreport、および -qlistopt コンパイラー・オプションの設定値に従って出力リストに作成されます。 -S オプションは、 別個のファイルにアセンブラー・リストを生成します。

アプリケーションのコンパイル中にコンパイラーがプログラミング・エラーに遭遇した場合、 コンパイラーは標準のエラー・デバイス、 および適切なコンパイラー・オプションが選択されている場合にはリスト・ファイルに診断メッセージを出します。

リストの援助によって問題の原因を突き止めるには、以下の項目を参照することができます。

見出しは、リストの主要なセクションを識別します。 見出しの先頭を簡単に見つけることができるように、不等号 「より大」(>) 記号のストリングがセクション見出しの前に付きます。

>>>>> section name

適切なコンパイラー・オプションを指定することによって、 リストに現れるセクションを選択できます。 これらのオプションに関する詳細については、 『エラー検査およびデバッグのオプション』および『リストおよびメッセージを制御するオプション』を参照してください。

ヘッダー・セクション

リスト・ファイルには、以下の項目が含まれているヘッダー・セクションがあります。

ヘッダー・セクションは、リストに必ず存在します。 それは最初の行であり、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--) -'
 

ここで、

15cc nnn
XL C/C++ メッセージとコンポーネント番号を示します。
severity_letter
前のセクションで説明したように、問題がどの程度重大であるかを示します。

コンパイル・エラーは以下のような重大度レベルをもつことがあり、 これはある種のエラー・メッセージの一部として表示されます。

U
リカバリー不能エラー。 内部コンパイラー・エラーが原因でコンパイルが失敗しました。
S
重大エラー。 コンパイルが以下のいずれかの理由で失敗しました。
  • コンパイラーが訂正できなかった条件が存在します。
  • 内部コンパイラー・テーブルがオーバーフローしました。 プログラムの処理は停止して、XL C/C++ はオブジェクト・ファイルを作成しません。
  • インクルード・ファイルが存在しません。 プログラムの処理は停止して、XL C/C++ はオブジェクト・ファイルを作成しません。
  • リカバリー不能プログラム・エラーが検出されました。 ソース・ファイルの処理は停止して、XL C/C++ はオブジェクト・ファイルを作成しません。 通常このエラーは、コンパイル中に報告されたプログラム・エラーを修正して訂正することができます。
E
C コンパイルのみ。コンパイラーは、ユーザーのソース・コードにエラーを検出し、 それを訂正しようと試みました。 コンパイラーはユーザーのアプリケーションのコンパイルを続けますが、 ユーザーが期待する結果を生成しないことがあります。
W
警告メッセージ。 コンパイラーは、ユーザーのソース・コードに潜在的な問題を検出しましたが、 それを訂正しようとはしませんでした。 コンパイラーはユーザーのアプリケーションのコンパイルを続けますが、 ユーザーが期待する結果を生成しないことがあります。
I
通知メッセージ。 エラーを示すわけではなく、予期しない動作を回避するために 留意すべきことを示しています。
'message text'
エラーを説明するテキストです。

デフォルトでは、重大エラー (重大度 S) を検出すると、 コンパイラーは出力ファイルを作成しないで停止します。 -qhalt オプションを使用して、別の重大度を指定すれば、重大度のより低いエラーに対して、 コンパイラーを停止させることができます。 たとえば、-qhalt=w を使用した場合、重大度 W またはそれ以上の重大度のエラーに遭遇するとコンパイラーが停止します。 この手法を使用すると、 プログラムの構文上およびセマンティック上の妥当性をチェックするのに必要なコンパイル時間を短縮することができます。 -qflag オプションを使用すると、 コンパイラーを停止させることなく重大度の低いメッセージを制限することができます。

変換レポート・セクション

-qreport オプションが有効になっていると、 コンパイラーは、XL C/C++ がプログラムを最適化した方法を示す変換レポートを生成します。 このセクションは、ユーザーが -qhot または -qsmp オプションによって生成された並列処理およびループ変換を表示することができるように、 元のソース・コードに対応する疑似コードを表示します。

属性および相互参照セクション

このセクションは、コンパイル単位で使用されるエンティティーに関する情報を提供します。 これが存在するのは、-qxref または -qattr コンパイラー・オプションが有効になっている場合です。 有効なオプションに応じて、 このセクションにはコンパイル単位で使用されるエンティティーに関する以下の情報の全部または一部が入ります。

-qxref または -qattr によって完全なサブオプションを指定すると、C および C++ はコンパイル単位内のすべてのエンティティーを報告します。 このサブオプションを指定しないと、 実際に使用しているエンティティーだけが表示されます。

オブジェクト・セクション

XL C/C++ は、-qlist コンパイラー・オプションが有効になっている場合にのみ、このセクションを作成します。 このセクションには、ソース行番号、命令オフセット (16 進表記)、 命令のアセンブラー・ニーモニック、命令の 16 進値を示す疑似アセンブラー・オブジェクト・コード・リストが入っています。 右側には、命令のサイクル・タイムとコンパイラーの中間言語も示されます。 最後に、合計サイクル・タイム (直線的実行時間) と、 作成されたマシン・インストラクションの合計数が表示されます。 コンパイル単位ごとに別個のセクションがあります。

注:
真のアセンブラー・リストを入手するには、 ユーザーのアプリケーションをコンパイルするときに、-S コンパイラー・オプションを指定します。 アセンブラー・リストには、filename.s という名前が付けられます。

ファイル・テーブル・セクション

このセクションには、 使用されている各メイン・ソース・ファイルとインクルード・ファイルのファイル番号とファイル名を示すテーブルが含まれています。 また、インクルード・ファイルが参照されるメイン・ソース・ファイルの行番号もリストします。 このセクションは必ず存在します。

コンパイル単位エピローグ・セクション

これは、各コンパイル単位のリストの最後のセクションです。 これには診断の要約が含まれていて、その単位が正常にコンパイルされたかどうかを示します。 ファイルにコンパイル単位が 1 つしか含まれていない場合は、 このセクションはリストに存在しません。

コンパイル・エピローグ・セクション

コンパイル・エピローグ・セクションは、 リストの終わりに 1 回発生するだけです。 コンパイルの完了時に、XL C/C++ はコンパイルの概要を提示します。 概要とは、読み取られたソース・レコードの数、コンパイル開始時刻、 コンパイルの終了時刻、合計コンパイル時間、合計 CPU 時間、および仮想 CPU 時間です。 このセクションは、リストに必ず存在します。

コンパイル済みアプリケーションのデバッグ

コンパイル時に -g または -qlinedebug コンパイラー・オプションを指定することは、 コンパイルされた出力にデバッグ情報を組み込むように XL C/C++ コンパイラーに指示することになります。 次に、 gdb または 他の任意のシンボリック・デバッガーを使用して、 コンパイル済みアプリケーションをステップスルーしその動作を検査することができます。