デバッグポイントの指定
デバッグポイントは、データベース文字セットでエンコードされたJSONドキュメントを使用して指定します。
-
情報が収集されるソース・コード内の場所
-
収集する情報を説明するアクション
- デバッグ情報を収集するタイミングを制御するオプションの条件
例9-1 デバッグポイントを指定するJSONテンプレート
{
at: <location-spec>,
action: [ <action-spec>, ... ],
[ condition: <condition-spec> ]
}
- デバッグポイントの場所
デバッグポイントの場所は、デバッグするアプリケーションのソース・コードの行番号で指定します。 - デバッグポイントのアクション
MLE実行後のデバッグでは、watch
とsnapshot
の2種類のアクションがサポートされます。 - デバッグポイントの条件
watch
とsnapshot
の両方を、condition
フィールドに指定した条件で制御できます。
親トピック: MLE JavaScriptモジュールの実行後のデバッグ
デバッグポイントの場所
デバッグポイントの場所は、デバッグするアプリケーションのソース・コードの行番号で指定します。
デバッグするMLEモジュールの名前は、name
フィールドで指定し、デバッグ情報が収集されるモジュール内の場所は、line
フィールドで指定します。例9-4に、サンプル値を含むJSONドキュメントの例を示します。
親トピック: デバッグポイントの指定
デバッグポイントのアクション
MLE実行後のデバッグでは、watch
とsnapshot
の2種類のアクションがサポートされます。
watch
アクションを使用すると、id
フィールドに指定された変数の値を記録できます。オプションのdepth
フィールドでは、コンポジット型変数の値を記録する深さを制御できます。
snapshot
アクションは、snapshot
アクションが呼び出された時点のスタック・トレースと、各スタック・フレームのローカル変数の値を記録します。snapshot
では、watch
と比較してより高い実行コストが必要になりますが、より深い情報が得られます。watch
アクションと同様に、オプションのdepth
フィールドを使用して、各変数のロギングの深さを制御できます。snapshot
アクションのdepth
パラメータは、アクションによって取得されるすべての変数に適用されます。
より正確には、depth
パラメータは、変数の値を取得するためにオブジェクト・ツリーをどの程度深くトラバースするかを制御します。たとえば、ネストされたオブジェクトを含む次の変数を考えます。
let x = {
a: {
val: 42
},
b: 3.14
};
depth
フィールドが2
として定義されている場合は、オブジェクト・ツリーがトラバースされ、ネストされたオブジェクトa
の値が取得されます(この場合は42
)。depth
が1
として指定されている場合、トラバースは最初のレベルで終了し、次の結果が生成されます。
x = {
"a": {
"<unreachable>": true
};
"b": 3.14
}
framesLimit
フィールドでは、記録するスタック・フレームの数を制御できます。デフォルトでは、すべてのスタック・フレームが記録されます。framesLimit
はsnapshot
にのみ適用されます。たとえば、a()
がb()
をコールし、b()
がc()
をコールするコール階層について考えてみます。c()
でスナップショットを取得すると、framesLimit=1
では最下部のスタック・フレーム(この場合はc()
)のみが取得され、framesLimit=2
では下部の2つ(この場合はc()
およびb()
)が取得されるというようになります。
例9-2 ウォッチ・アクションを指定するためのJSONテンプレート
変数をウォッチするには、type
をwatch
に設定する必要があります。id
パラメータは、ウォッチする変数を識別するために使用され、文字列または文字列の配列として指定する必要があります。depth
パラメータはオプションで、数値で定義されます。
actions: [
{ type: "watch",
id: <string[]> | <string>,
[depth : <number>] }
]
例9-3 スナップショット・アクションを指定するためのJSONテンプレート
snapshot
アクションを使用するには、type
パラメータをsnapshot
に設定する必要があります。framesLimit
およびdepth
フィールドはオプションで、数値として指定します。
actions: [
{ type: "snapshot",
[framesLimit: <number>],
[depth : <number>] }
]
親トピック: デバッグポイントの指定
デバッグポイントの条件
watch
とsnapshot
の両方を、condition
フィールドに指定した条件で制御できます。
式は、アプリケーションのコンテキストの、デバッグポイントで指定した場所で評価され、式の評価がtrue
である場合にのみ、関連するアクションがトリガーされます。
conditionフィールドに含めることができる式のタイプに制限はありません。式を評価しても、デバッグ対象のプログラムの動作が変更されないようにする必要があります。
例9-4 MLEモジュール内の変数のウォッチ
次のコードでは、モジュールmyModule1
のデバッグポイントと2つの関連アクションを指定しています。ロギングの深度が3
に制限された変数x
のwatch
アクションと、ロギングの深度に制限のない変数y
のwatch
アクションです。デバッグポイントには、条件(x.id>100
)が満たされた場合にのみデバッグポイント・アクションがトリガーされるように、condition
も関連付けられています。
{
"at" : {
"name" : "myModule1",
"line" : 314
},
"actions" : [
{ "type": "watch", "id" : "x", "depth" : 3 },
{ "type": "watch", "id" : "y" }
],
"condition" : "x.id > 100"
}
親トピック: デバッグポイントの指定