26

JavaScriptで例外をキャッチ/処理する場合、例外が発生したときのコールスタックをどのように判断できますか?(また、可能であれば行番号は何でしたか)

try
{
    // etc...
}
catch (ex)
{
    // At this point here I want to be able to print out a detailed exception 
    // message, complete with call stack, and if possible line numbers.
}
4

4 に答える 4

16

ブラウザごとにこれを異なる方法で処理するため、これを行うための普遍的な方法はありません。このブログ投稿には、サポートされているほとんどのブラウザーのスタックトレースをダンプするための優れたコードが含まれています。行番号を提供する良い方法はないと思います。

特に1つの関数をデバッグする場合、Firebugには優れたスタックトレース関数があります(console.trace()を参照)。

于 2009-12-14T13:52:50.480 に答える
14

これを見てください。

利用可能な情報を分析する方法:

try 
{ 
    doInit(); 
} catch(err) 
{ 
    var vDebug = ""; 
    for (var prop in err) 
    {  
       vDebug += "property: "+ prop+ " value: ["+ err[prop]+ "]\n"; 
    } 
    vDebug += "toString(): " + " value: [" + err.toString() + "]"; 
    status.rawValue = vDebug; 
}
于 2009-12-14T13:53:13.273 に答える
1

IEで実行されているJavaScriptでは、例外がキャッチされた時点でスタックトレースをキャプチャできないことを発見しました。このPDFによると、IEでスタックトレースを取得する唯一の方法は、例外を処理しない場合です。

于 2009-12-14T20:46:18.540 に答える
0

ほとんどのエラーでは、エラーの場所の行番号と列番号を含むスタックトレースを調べることができます。

try {
  throw new Error('foo');
} catch(e) {
  console.log(e.message);
  console.log(e.stack);
  const [, lineno, colno] = e.stack.match(/(\d+):(\d+)/);
  console.log('Line:', lineno);
  console.log('Column:', colno);
}

この13行目は正しいです。これは、stacksnippets.netからの応答でエラーが発生したHTMLの行であるためです。

ここに画像の説明を入力してください

これは、またはのようにスローされたエラー以外では機能しないことに注意してください(これは正確にはこの理由で推奨されていません)。throw nullthrow 'foo'

于 2021-04-13T06:41:44.630 に答える