Error.prototype.stack

この記事は編集レビューを必要としています。ぜひご協力ください

この翻訳は不完全です。英語から この記事を翻訳 してください。

非標準
This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.

概要

Errorオブジェクトの非標準の stack プロパティは関数がコールされたこと、どのような順序か、行とファイルはどちらからか、どんな引数を持っているかについてのトレースを提供します。スタック文字列は最も最近のコールから初期のコールまで オリジナルグローバルスコープコールにさかのぼりつつ、進みます。

説明

それぞれのステップは改行、(グローバルスコープからでないなら)関数名である行の最初の部分、 (@) 記号、ファイル位置 (エラーがスローされている時に関数がエラーコンストラクタである時を除いて)、 コロン、ファイル位置があるなら、、行数によって分割されます。 (ErrorオブジェクトもfileNamelineNumbercolumnNumberプロパティをスローされたエラーから取り戻されるプロパティを持つことを注意して下さい。(しかしエラーのみで、トレースではありません。))

これがFirefoxで使われているフォーマットであることに注意して下さい。標準フォーマットではありません。しかしながら、Safari 6+、Opera 12- はとても同じフォーマットを使います。V8 JavaScript エンジン(Chrome, Opera 15+, Android ブラウザのように)や IE10+を使っているブラウザは、他方では、違ったフォーマットを使います。(これらの MSDN error.stack を確認して下さい。).

スタック上の引数の値: Firefox 14以上 (バグ 744842)、 関数名に続いて、(@)記号の前に、すぐに格好内の文字列に変換される引数の値になります。 オブジェクト(もしくは 配列など)が 変換された形式"[object Object]"で現れて、実際のオブジェクトに戻って評価されない間、スカラー値は 検索されます。(arguments.callee.caller.argumentsを使うことは、Firefox 14以前ではまだ可能です。関数名はarguments.callee.caller.nameによって検索されます。)"undefined""(void 0)"としてリストされます。Note that if 文字列引数が"@""("")" のような値で渡されたら(もしくはファイル名に渡されたら)、コンポーネント部分で行を中断することに対して簡単に頼らないです。このようにして、Firefox 14移行では、これは問題が少ないです。

次のHTMLでは、stackプロパティの使用を説明します。

<!DOCTYPE HTML>
<meta charset="UTF-8">
<title>Stack Trace Example</title>
<body>
<script>
function trace() {
  try {
    throw new Error('myError');
  }
  catch(e) {
    alert(e.stack);
  }
}
function b() {
  trace();
}
function a() {
  b(3, 4, '\n\n', undefined, {});
}
a('first call, firstarg');
</script>

上記のHTMLは Windows上のC:\example.htmlとして保存されていると仮定して、次のテキストでアラートメッセージボックスを生成します。:

カラム行を含んでFirefox 30 移行で始まります。(バグ 762556):

trace@file:///C:/example.html:9:17
b@file:///C:/example.html:16:13
a@file:///C:/example.html:19:13
@file:///C:/example.html:21:9

Firefox 14 から Firefox 29:

trace@file:///C:/example.html:9
b@file:///C:/example.html:16
a@file:///C:/example.html:19
@file:///C:/example.html:21

Firefox 13 以前は代わりに次のテキストで生成します。:

Error("myError")@:0
trace()@file:///C:/example.html:9
b(3,4,"\n\n",(void 0),[object Object])@file:///C:/example.html:16
a("first call, firstarg")@file:///C:/example.html:19
@file:///C:/example.html:21

evalされたコードのスタック

Firefox 30 (Firefox 30 / Thunderbird 30 / SeaMonkey 2.27 / Firefox OS 1.4)で始めると、 Function()eval()でのコードのエラースタックは、これらのコール内での行番号とカラム番号についてさらに詳細な情報で現在スタックを生成します。 関数呼び出しは"> Function" で示され、 eval コールは"> eval"で示されます。 バグ 332176を確認して下さい。

try {
  new Function('throw new Error()')();
} catch (e) {
  console.log(e.stack);
}

// anonymous@file:///C:/example.html line 7 > Function:1:1
// @file:///C:/example.html:7:6


try {
  eval("eval('FAIL')");
} catch (x) {
  console.log(x.stack);
}

// @file:///C:/example.html line 7 > eval line 1 > eval:1:1
// @file:///C:/example.html line 7 > eval:1:1
// @file:///C:/example.html:7:6

evalソースに名付けるために//# sourceURL ディレクティブも使うことができます。Debuggerblog post内のeval ソースをデバッグも確認して下さい。

仕様

すべての仕様では実装されておりません。非標準。

ブラウザ実装状況

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート (有) (有) 10 (有) 6
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート Android 4 (perhaps Android 3, but not Android 2) ? ? ? ? 6

関連情報

ドキュメントのタグと貢献者

 このページの貢献者: shide55
 最終更新者: shide55,