4D v16.3コンパイルの診断ツール |
||
|
4D v16.3
コンパイルの診断ツール
コンパイルの診断ツール
データベースの分析や訂正を行うために、3種類のツールが用意されています:
注: 自動コンパイラーメソッドにより、変数定義用の重要なツールも提供されています。 — 変数定義を生成するを参照してください。 シンボルファイルはテキストタイプのドキュメントであり、その長さはデータベースサイズによって異なります。デフォルトでは、コンパイル時にこのファイルは生成されません。このファイルを生成するには、データベース設定の該当するオプションを選択しなければなりません (コンパイルオプション参照)。このファイルが生成されると、データベースのストラクチャが格納されているフォルダー内に配置され DatabaseName_symbols.txt のような名前が付けられます テキストエディターでシンボルファイルを開くと、次のように表示されます: ヘッダーにはデータベースの名前、ドキュメントの作成日付と時刻が表示されます。このドキュメントは4 つの部分に分かれています:
これら2 つのリストは、4 つのカラムに分かれています:
注: コンパイル時に、コンパイラーは特定のプロセス変数が使用されているプロセスを判別できません。プロセス変数には、各プロセスごとに異なる値が格納されている可能性があります。そのため、新規プロセスが開始されるたびに、すべてのプロセス変数が意図的に複製されます。したがって、メモリ上でこれらのプロセス変数が占める容量に注意することをお勧めします。また、プロセス変数に必要な容量は、プロセスのスタックサイズとは関係ないという点に留意してください。 ローカル変数のリストは、データベースメソッド、プロジェクトメソッド、トリガー(テーブルメソッド)、フォームメソッド、オブジェクトメソッドごとに、4Dと同じ順番で並べ替えられています。 このリストは、3 つのカラムに分かれています:
ファイルの最後には、データベースメソッドとプロジェクトメソッドの全リストが、それぞれ次の情報とともに納められます:
この情報は、次の形式で示されます: プロシージャーまたは関数 <メソッド名>(パラメーターのデータタイプ):戻り値のデータタイプ, コール数, スレッドセーフまたはスレッドアンセーフ データベース設定にあるオプションを使用して、コンパイル時にエラーファイルを生成するかどうかを選択することができます (コンパイルオプション参照)。エラーファイルを生成する場合、そのファイルにはDatabaseName_errors.xmlという名前が自動的に付けられ、データベースのストラクチャーファイルと同階層に保存されます。 コンパイラーウインドウからエラーに直接アクセスすることができますが、特にクライアント/サーバー環境で複数の開発者が共に作業を行うような体制であれば、あるマシンから別のマシンへ送信できるエラーファイルがあると便利です。エラーファイルは、その内容を自動的に解析しやすいようにXML フォーマットで生成されます。また、エラー表示用に独自のインターフェースを作成することもできます。 エラーファイルの長さは、コンパイラーにより生成されるエラーと警告の数により変わります。テキストエディターでエラーファイルを開くと、次のように表示されます: エラーファイルの構造は次の通りです:
エラーファイルには、次の3 つのタイプのメッセージが含まれます:
これらのエラーは、その説明とともにコンテキスト(エラーが見つかった行)内に表示されます。コンパイラーは、データタイプやシンタックスに関する矛盾を表現式で見つけると、このタイプのエラーをレポートします。 コンパイラーウインドウでは、検出された各エラーをダブルクリックすると、該当するメソッドが直接4D のメソッドエディターで開かれ、エラーを含む行が反転表示されます。 シンタックス/タイプ定義の診断エラーの一覧は、4D ランゲージリファレンスマニュアルのエラーメッセージを参照してください。 これらのエラーは、データベースのコンパイルを不可能にします。コンパイラーが全般的なエラーを生成するケースは、次の2 つです:
全般的なエラーは特定のメソッドに関連していないため、このような名前が付けられています。最初のケースの場合、コンパイラーはデータベースのいずれの箇所でも、指定されたタイプ定義を実行できません。2 番目のケースでは、いずれのオブジェクトに特定の名前を割り当てるべきかを決定できません。 全般的なエラーの一覧は4D ランゲージリファレンスマニュアルのエラーメッセージを参照してください。 警告はエラーではありません。警告により、データベースがコンパイルできなくなることはありません。これは、エラーになる可能性のあるコードを示すだけです。 コンパイラーウインドウにおいて、警告はイタリック体で表示されます。それぞれの警告をダブルクリックすると、該当するメソッドが直接4D のメソッドエディターで開かれ、その警告に関係する行が反転表示されます。警告の一覧は4D ランゲージリファレンスマニュアルの警告メッセージを参照してください。 特定の警告を無効にすることができます (コンパイル時に警告を無効にする参照)。 データベース設定において、範囲チェックはデフォルトで選択されています (コンパイルオプション参照)。 他のオプションはすべてコンパイル時に機能しますが、範囲チェックはコンパイル済みデータベースの実行時にチェックを開始します。つまり、範囲チェックのメッセージは、データベースの実行中にのみ表示されます。 範囲チェックは補助的な検証を行い、論理上および構文上の矛盾点を探します。通常、これはコンパイラーの役割です。範囲チェックを行う際に、コンパイラーは“リクエストされた内容を考慮すると、得ようとしている結果は意外なものでしょうか?”という質問を投げかけます。範囲チェックは“現場”のコントローラのようなものであり、一定の時点でデータベース内のオブジェクトのステータスを評価します。 範囲チェックは次のように機能します。例えば、配列MyArrayをテキストとして定義します。MyArrayの要素数は、カレントメソッドに応じて変わるものとします。If you MyArray の5 番目の要素に“Hello”という値を代入したい場合、以下のように記述します: MyArray{5}:="Hello" この時点で、MyArray に5 つ以上の要素が存在すれば何も問題ありません。代入は正常に行われます。しかし、この時点でMyArray の要素数が5 つ未満であれば、代入は無効になります。 このような状況は、メソッドが実行されることを前提としているため、コンパイル時に検出することができません。コンパイラーは、このメソッドが呼び出される状況は分かりません。データベースの使用時に実際に行われる操作を監視できる方法は、範囲チェックだけです。前述の例題では、コンパイラーは4D を使用して実行時エラーを表示します。配列、ポインター、文字列を処理する場合に、範囲チェックが特に役立つ理由は、すぐにお分かりでしょう。 範囲チェックを要求した場合に、コンパイラーから生成されるメッセージは4Dランゲージリファレンスマニュアルの範囲チェックメッセージに記載されています。 範囲チェックが有効な場合でも、コード内で間違いがないと思われる箇所に対して範囲チェックを適用したくないときもあります。具体的に言うと、かなりの回数繰り返されるループに関し、旧式のマシン上でコンパイル済みデータベースを実行すると、範囲チェックにより処理速度が著しく低下するおそれがあります。関連するコードに誤りがなく、システムエラーを引き起こさないことが確実であれば、範囲チェックをローカル上で無効にすることができます。 これを行うには、範囲チェックから外すコードを特殊なコメントである“`%R-”と“`%R+”で囲みます。//%R- コメントは範囲チェックを無効にし、 //%R+ はそれを再び有効にします: ... //範囲チェックは有効 注: このメカニズムは、範囲チェックが有効である場合にのみ機能します。 例えば、データベースの実行中に異常に気付いたものとします。その問題の原因について推測する前に、コンパイラーより提供される手がかりを思い出してください。 考えられる異常としては、次のようなものがあります:
|
プロパティ
プロダクト: 4D
履歴
変更: 4D v15 R5 タグ %R, warning, Contrôle d'exécution ARTICLE USAGE
デザインリファレンス ( 4D v16) |