デバッグ出力の分析
デバッグポイントからの出力は、Javaプロファイラ・ヒープ・ダンプ・バージョン1.0.2形式で格納されます。
-
dbms_mle.parse_debug_output
ファンクションによって取得したデバッグ情報のテキスト表現を使用します。 -
デバッグ出力を含む
BLOB sink
をhprof
ファイルにエクスポートし、既存のいくつかの開発者ツールを使用して情報を分析します。
トピック
- デバッグ出力のテキスト表現
ファンクションdbms_mle.parse_debug_output
は、ヒープ・ダンプ形式のデバッグ情報を含むBLOB
を入力として使用し、デバッグ情報のJSON表現を戻します。 - 開発者ツールを使用したデバッグ出力の分析
デバッグ出力のテキスト表現を分析するかわりに、JDeveloper、NetBeans、Oracle Database Actionsなどのツールを利用することもできます。
親トピック: MLE JavaScriptモジュールの実行後のデバッグ
デバッグ出力のテキスト表現
ファンクションdbms_mle.parse_debug_output
は、ヒープ・ダンプ形式のデバッグ情報を含むBLOB
を入力として使用し、デバッグ情報のJSON表現を戻します。
dbms_mle.parse_debug_output
の出力は、DebugPointData
オブジェクトの配列です。DebugPointData
は、デバッグポイントがヒットするたびに記録されるデバッグ情報を表し、Frame
オブジェクトの配列で構成されます。各Frame
には、情報が収集されたソース・コードの場所(at
フィールド)と、その場所で記録されたローカル変数の名前および値(values
フィールド)が含まれます。Frame.values
のキーは記録された変数の名前であり、値はそれらの変数の値であることに注意してください。
例9-6に、サンプルのJavaScriptプログラムでデバッグポイントを指定した後、ファンクションdbms_mle.parse_debug_output
を使用してデバッグ出力のテキスト表現を生成する方法を示します。
例9-6 デバッグ出力のテキスト表現の取得
この例の後半で示すデバッグは、モジュールfibunacci_module
で定義されたJavaScriptファンクションfib
に対して実行されます:
CREATE OR REPLACE MLE MODULE fibunacci_module
LANGUAGE JAVASCRIPT AS
export function fib( n ) {
if (n < 0) {
throw Error("must provide a positive number to fib()");
}
if (n < 2) {
return n;
} else {
return fib(n-1) + fib(n-2);
}
}
/
CREATE OR REPLACE FUNCTION fib( p_value number)
RETURN NUMBER
AS MLE MODULE fibunacci_module
SIGNATURE 'fib(number)';
/
デバッグポイントは行9に配置され、DBMS_MLE.PARSE_DEBUG_OUTPUT
ファンクションを使用してデバッグ情報を表示します:
SET SERVEROUTPUT ON;
DECLARE
l_debugspec JSON;
l_debugsink BLOB;
l_debuginfo JSON;
l_value NUMBER;
BEGIN
l_debugspec := JSON ('
{
version : "1.0",
debugpoints : [
{
"at" : {
"name" : "FIBUNACCI_MODULE",
"line" : 9
},
"actions" : [
{ "type" : "watch", "id" : "n" }
],
},
]
}
');
-- create a temporary lob to store the raw
-- debug output
DBMS_LOB.CREATETEMPORARY( l_debugsink, false );
DBMS_MLE.ENABLE_DEBUGGING( l_debugspec, l_debugsink );
-- run the application code
l_value := fib(4);
DBMS_MLE.DISABLE_DEBUGGING;
-- retrieve a textual representation of the debug
-- output
l_debuginfo := DBMS_MLE.PARSE_DEBUG_OUTPUT( l_debugsink );
DBMS_OUTPUT.PUT_LINE(
json_serialize(l_debuginfo pretty)
);
END;
/
結果:
[
[
{
"at": {
"name": "USER1.FIBUNACCI_MODULE",
"line": 9
},
"values": {
"n": 4
}
}
],
[
{
"at": {
"name": "USER1.FIBUNACCI_MODULE",
"line": 9
},
"values": {
"n": 3
}
}
],
[
{
"at": {
"name": "USER1.FIBUNACCI_MODULE",
"line": 9
},
"values": {
"n": 2
}
}
],
[
{
"at": {
"name": "USER1.FIBUNACCI_MODULE",
"line": 9
},
"values": {
"n": 2
}
}
]
]
親トピック: デバッグ出力の分析
開発者ツールを使用したデバッグ出力の分析
デバッグ出力のテキスト表現を分析するかわりに、JDeveloper、NetBeans、Oracle Database Actionsなどのツールを利用することもできます。
実行が終了したら、選択したツールを使用してローカル変数の値を検査したり、各時点での変数のグラフを検査できます。
必要に応じて、新しいツールとの統合(Chrome開発ツールなど)を開発し、MLEのユース・ケースに特化したUIを設計できます。
ノート:
Oracle Database Actionsでは、Oracle Database 23ai、リリース更新23.1.2以降、MLE実行後のデバッグがサポートされています。
関連項目:
MLEでのデータベース・アクションの使用の詳細は、Oracle SQL Developer Webの使用を参照してください
親トピック: デバッグ出力の分析