例外をスローしたときにJavaScriptスタックトレースを取得するにはどうすればよいですか?


519

自分でJavaScript例外をスローした場合(例throw "AArrggg":)、スタックトレースを(Firebugなどで)取得するにはどうすればよいですか?今私はただメッセージを受け取ります。

編集:以下の多くの人々が投稿したように、JavaScript例外のスタックトレースを取得することは可能ですが例外のスタックトレースを取得したいと考えてます。例えば:

function foo() {
    bar(2);
}
function bar(n) {
    if (n < 2)
        throw "Oh no! 'n' is too small!"
    bar(n-1);
}

ときにfoo呼ばれて、私はへの呼び出しが含まれてスタックトレースを取得したいですfoobarbar



バグは2008年からFirebugバグトラッカーで引き続き開いています:code.google.com/p/fbug/issues/detail?id = 1260-スターを付けてください!
Miller Medeiros、2012年

13
その答えは、「throw new Error( 'arrrgh');」となるはずです。このうまく書かれたページを参照してください:devthought.com/2011/12/22/a-string-is-not-an-error
エレガントなサイコロ

1
(2013)単純な場合でも、FirefoxのFirebugでスタックトレースを取得できるthrow 'arrrgh';ようになり、それらはと同じように見えthrow new Error('arrrgh');ます。throw new Error('arrrgh');ただし、Chromeデバッガーは前述のように必要です(ただし、Chromeはより詳細なトレースを提供するようです)。
user56reinstatemonica8 2013

26
@ChetanSastry「javascriptスタックトレース」を検索したところ、これが最初の結果でした
David Sykes

回答:


756

編集2(2017):

最近のすべてのブラウザーでは、次のように呼び出すだけです:console.trace(); (MDNリファレンス)

編集1(2013):

元の質問のコメントで指摘されているより優れた(そしてより単純な)ソリューションは、次のようにオブジェクトのstackプロパティを使用するErrorことです。

function stackTrace() {
    var err = new Error();
    return err.stack;
}

これにより、次のような出力が生成されます。

DBX.Utils.stackTrace@http://localhost:49573/assets/js/scripts.js:44
DBX.Console.Debug@http://localhost:49573/assets/js/scripts.js:9
.success@http://localhost:49573/:462
x.Callbacks/c@http://localhost:49573/assets/js/jquery-1.10.2.min.js:4
x.Callbacks/p.fireWith@http://localhost:49573/assets/js/jquery-1.10.2.min.js:4
k@http://localhost:49573/assets/js/jquery-1.10.2.min.js:6
.send/r@http://localhost:49573/assets/js/jquery-1.10.2.min.js:6

呼び出し関数の名前、URL、その呼び出し関数などを指定します。

オリジナル(2009):

このスニペットの変更されたバージョンは多少役立つかもしれません:

function stacktrace() { 
  function st2(f) {
    return !f ? [] : 
        st2(f.caller).concat([f.toString().split('(')[0].substring(9) + '(' + f.arguments.join(',') + ')']);
  }
  return st2(arguments.callee.caller);
}

11
なぜこれ以上投票されないのかわかりません。他の回答ではうまくいきませんでした。ところで、引数を配列として扱わないようにしてください(ここで更新されたスニペット:gist.github.com/965603
ripper234

1
chromeで機能しない、tacktrace():[Exception:TypeError:Object#<Object> has no method
hetaoblog

3
元の質問のコメントを参照:カスタムコードは必要ありません。「throw new Error( 'arrrgh')」を使用してください
Joshua Richardson

16
Error.stackはIEでは定義されておらず、ChromeおよびMozilla Firefoxでのみ機能します
Philipp Munin

4
caller廃止され、calleeES5 Strictモードから削除されます。これが、stackoverflow.com
questions / 103598 /…

187

chromium / chrome(V8を使用する他のブラウザ)とFirefoxにも、Errorオブジェクトのスタックプロパティを介してスタックトレースを取得するための便利なインターフェースがあることに注意してください

try {
   // Code throwing an exception
} catch(e) {
  console.log(e.stack);
}

これは、基本例外だけでなく、自分でスローした例外にも適用されます。(とにかく良い習慣であるErrorクラスを使用することを考慮してください)。

V8ドキュメントの詳細を見る


12
Firefox .stackもこのプロパティをサポートしています。
kennytm 2013

2
100回賛成できればいいのに!Jocelynに感謝します。それは本当に大いに役立った
サフラジック2013

1
console.error(e.stack);デフォルトの例外メッセージのように見えるように使用することもできます
Bruno Peres

80

Firefoxでは、例外をスローする必要はないようです。それで十分です

e = new Error();
console.log(e.stack);

(JQMを使用して作成された)モバイルアプリでも動作します。
Samik R 2014

Chromiumでも動作します(とにかくバージョン43)。
アンディビバリー2015

Firefox 59ではwindow.onerror、を介して呼び出された場合、これはonerror機能せず、関数のみのほぼ空のスタックが表示されます。
Code4R7 2018

console.log(new Error().stack)> : (> : (> :(
Andrew

25

Firebugを使用している場合は、[スクリプト]タブにすべてのエラーの中断オプションがあります。スクリプトがブレークポイントに到達すると、firebugのスタックウィンドウを確認できます。

スクリーンショット


5
うーん、それはうまくいかないようです。Javascriptによって発生したエラー(たとえば、未定義の変数エラー)でデバッガーを停止しますが、独自の例外をスローしても、「Uncaught exception」メッセージ以外は何も表示されません。
David Wolever、2009年

11

元の質問のコメントで指摘されている優れた(そして単純な)解決策は、次のようにオブジェクトのstackプロパティを使用するErrorことです。

function stackTrace() {
    var err = new Error();
    return err.stack;
}

これにより、次のような出力が生成されます。

DBX.Utils.stackTrace@http://localhost:49573/assets/js/scripts.js:44
DBX.Console.Debug@http://localhost:49573/assets/js/scripts.js:9
.success@http://localhost:49573/:462
x.Callbacks/c@http://localhost:49573/assets/js/jquery-1.10.2.min.js:4
x.Callbacks/p.fireWith@http://localhost:49573/assets/js/jquery-1.10.2.min.js:4
k@http://localhost:49573/assets/js/jquery-1.10.2.min.js:6
.send/r@http://localhost:49573/assets/js/jquery-1.10.2.min.js:6

呼び出し関数の名前、URLと行番号、その呼び出し関数などを指定します。

私は現在取り組んでいるプロジェクトのために考案した非常に精巧で見事な解決策があり、一般化するために少し抽出して作り直しました。ここにあります:

(function(context){
    // Only global namespace.
    var Console = {
        //Settings
        settings: {
            debug: {
                alwaysShowURL: false,
                enabled: true,
                showInfo: true
            },
            stackTrace: {
                enabled: true,
                collapsed: true,
                ignoreDebugFuncs: true,
                spacing: false
            }
        }
    };

    // String formatting prototype function.
    if (!String.prototype.format) {
        String.prototype.format = function () {
            var s = this.toString(),
                args = typeof arguments[0],
                args = (("string" == args || "number" == args) ? arguments : arguments[0]);
            if (!arguments.length)
                return s;
            for (arg in args)
                s = s.replace(RegExp("\\{" + arg + "\\}", "gi"), args[arg]);
            return s;
        }
    }

    // String repeating prototype function.
    if (!String.prototype.times) {
        String.prototype.times = function () {
            var s = this.toString(),
                tempStr = "",
                times = arguments[0];
            if (!arguments.length)
                return s;
            for (var i = 0; i < times; i++)
                tempStr += s;
            return tempStr;
        }
    }

    // Commonly used functions
    Console.debug = function () {
        if (Console.settings.debug.enabled) {
            var args = ((typeof arguments !== 'undefined') ? Array.prototype.slice.call(arguments, 0) : []),
                sUA = navigator.userAgent,
                currentBrowser = {
                    firefox: /firefox/gi.test(sUA),
                    webkit: /webkit/gi.test(sUA),
                },
                aLines = Console.stackTrace().split("\n"),
                aCurrentLine,
                iCurrIndex = ((currentBrowser.webkit) ? 3 : 2),
                sCssBlack = "color:black;",
                sCssFormat = "color:{0}; font-weight:bold;",
                sLines = "";

            if (currentBrowser.firefox)
                aCurrentLine = aLines[iCurrIndex].replace(/(.*):/, "$1@").split("@");
            else if (currentBrowser.webkit)
                aCurrentLine = aLines[iCurrIndex].replace("at ", "").replace(")", "").replace(/( \()/gi, "@").replace(/(.*):(\d*):(\d*)/, "$1@$2@$3").split("@");

            // Show info if the setting is true and there's no extra trace (would be kind of pointless).
            if (Console.settings.debug.showInfo && !Console.settings.stackTrace.enabled) {
                var sFunc = aCurrentLine[0].trim(),
                    sURL = aCurrentLine[1].trim(),
                    sURL = ((!Console.settings.debug.alwaysShowURL && context.location.href == sURL) ? "this page" : sURL),
                    sLine = aCurrentLine[2].trim(),
                    sCol;

                if (currentBrowser.webkit)
                    sCol = aCurrentLine[3].trim();

                console.info("%cOn line %c{0}%c{1}%c{2}%c of %c{3}%c inside the %c{4}%c function:".format(sLine, ((currentBrowser.webkit) ? ", column " : ""), ((currentBrowser.webkit) ? sCol : ""), sURL, sFunc),
                             sCssBlack, sCssFormat.format("red"),
                             sCssBlack, sCssFormat.format("purple"),
                             sCssBlack, sCssFormat.format("green"),
                             sCssBlack, sCssFormat.format("blue"),
                             sCssBlack);
            }

            // If the setting permits, get rid of the two obvious debug functions (Console.debug and Console.stackTrace).
            if (Console.settings.stackTrace.ignoreDebugFuncs) {
                // In WebKit (Chrome at least), there's an extra line at the top that says "Error" so adjust for this.
                if (currentBrowser.webkit)
                    aLines.shift();
                aLines.shift();
                aLines.shift();
            }

            sLines = aLines.join(((Console.settings.stackTrace.spacing) ? "\n\n" : "\n")).trim();

            trace = typeof trace !== 'undefined' ? trace : true;
            if (typeof console !== "undefined") {
                for (var arg in args)
                    console.debug(args[arg]);

                if (Console.settings.stackTrace.enabled) {
                    var sCss = "color:red; font-weight: bold;",
                        sTitle = "%c Stack Trace" + " ".times(70);

                    if (Console.settings.stackTrace.collapsed)
                        console.groupCollapsed(sTitle, sCss);
                    else
                        console.group(sTitle, sCss);

                    console.debug("%c" + sLines, "color: #666666; font-style: italic;");

                    console.groupEnd();
                }
            }
        }
    }
    Console.stackTrace = function () {
        var err = new Error();
        return err.stack;
    }

    context.Console = Console;
})(window);

GitHub(現在v1.2)で確認してください!のように使用できConsole.debug("Whatever");、の設定に応じてConsole、出力とスタックトレースを出力します(または単に単純な情報/何も追加しません)。次に例を示します。

Console.js

Consoleオブジェクトの設定をいじってみてください!トレースの線の間にスペースを追加して、完全にオフにすることができます。ここでは、次のようにConsole.trace設定されていfalseます。

跡がない

表示さConsole.settings.debug.showInfoれる情報の最初のビットをオフにする(に設定するfalse)か、デバッグを完全に無効にする(に設定Console.settings.debug.enabledするfalse)こともできるため、デバッグステートメントを再度コメント化する必要はありません。そのままにしておくと、何も起こりません。


10

あなたが使えるものは何も組み込まれていないと思いますが、私は自分でロールする人の例をたくさん見つけました。


ああ、ありがとう-そこにある最初のリンクはそうかもしれないようです(ただし、再帰サポートがないため、リンクが機能しなくなる可能性があります)。
David Wolever、2009

ええ、私は一見再帰をサポートするものを見たことがありませんでした。それに対する良い解決策があるかどうかを知りたいです。
Mark Biek、2009

1
2番目のリンクは、引数変数を使用して手動でビルドするのではなく、エラースタックトレースを使用するため、FirefoxとOperaの再帰をサポートする必要があると思います。再帰の問題に対するクロスブラウザソリューションを見つけたらぜひ聞いてください(最初の記事は私のものです)。:)
エレファント2009

象:2番目はここでは機能しません。例外をキャッチすると、それは「文字列」(つまり「e.stack」ではない)になるためです。foo = function(){throw "Arg"; } {foo();を試してください } catch(e){/ * typeof e == "string" * /}たぶん私はそれを間違って投げていますか?(愚かなJavascriptチュートリアルがどのように愚かであるかについての義務的な
発言を

オブジェクトをスローしてみてください:throw { name: 'NameOfException', message: 'He's dead, Jim' }
Aaron Digulla

7

投げたとしても、インスタンスのstackstacktraceOperaの)プロパティにアクセスできますError。問題は、使用することを確認する必要があることですthrow new Error(string)(の代わりに新しいものを忘れないでください)throw string

例:

try {
    0++;
} catch (e) {
    var myStackTrace = e.stack || e.stacktrace || "";
}

スタックトレースはOperaでは機能しません。私もそれについて何かを見つけることができません。
NVI 2009年

@NV:スタックトレースはユーザーが作成したエラーではないようですので、代わりにこれを行う必要があります:{0 ++} catch(e){myStackTrace = e.stack ||を試してください e.stacktrace}
Eli Gray、


7

これにより、最新のChrome、Opera、Firefox、IE10 +のスタックトレースが(文字列の配列として)提供されます

function getStackTrace () {

  var stack;

  try {
    throw new Error('');
  }
  catch (error) {
    stack = error.stack || '';
  }

  stack = stack.split('\n').map(function (line) { return line.trim(); });
  return stack.splice(stack[0] == 'Error' ? 2 : 1);
}

使用法:

console.log(getStackTrace().join('\n'));

独自の呼び出しと、ChromeおよびFirefox(IEは除く)で使用されるタイトル「エラー」をスタックから除外します。

古いブラウザではクラッシュせず、空の配列を返すだけです。より普遍的なソリューションが必要な場合は、stacktrace.jsを参照してください。サポートされているブラウザのリストは本当に印象的ですが、私の心には、それが意図されているその小さなタスクにとって非常に大きいです:すべての依存関係を含む37Kbの縮小テキスト。


7

Eugeneの回答の更新:IE(特定のバージョン?)にstackプロパティを設定するには、エラーオブジェクトをスローする必要があります。以下は、彼の現在の例よりもうまく機能undefinedし、IEに戻ったときに回避する必要があります。

function stackTrace() {
  try {
    var err = new Error();
    throw err;
  } catch (err) {
    return err.stack;
  }
}

注1:この種のことは、特に頻繁に呼び出される場合は、デバッグ時にのみ実行し、ライブ時には無効にする必要があります。注2:これはすべてのブラウザーで機能するとは限りませんが、FFおよびIE 11で機能するようです。


6

Firebugで実際のスタックトレースを取得する1つの方法は、未定義の関数を呼び出すような実際のエラーを作成することです。

function foo(b){
  if (typeof b !== 'string'){
    // undefined Error type to get the call stack
    throw new ChuckNorrisError("Chuck Norris catches you.");
  }
}

function bar(a){
  foo(a);
}

foo(123);

またはスタックトレースを表示するのでconsole.error()throwステートメントの後に使用console.error()します。


4

最新の(2017)ブラウザー(IE11、Opera、Chrome、FireFox、Yandex)で動作するこのポリフィルコード:

printStackTrace: function () {
    var err = new Error();
    var stack = err.stack || /*old opera*/ err.stacktrace || ( /*IE11*/ console.trace ? console.trace() : "no stack info");
    return stack;
}

その他の答え:

function stackTrace() {
  var err = new Error();
  return err.stack;
}

IE 11では動作しません。

arguments.callee.callerの使用-どのブラウザでもstrictモードでは機能しません!


3

Google Chrome(バージョン19.0以降)では、例外をスローするだけで完全に機能します。例えば:

/* file: code.js, line numbers shown */

188: function fa() {
189:    console.log('executing fa...');
190:    fb();
191: }
192:
193: function fb() {
194:    console.log('executing fb...');
195:    fc()
196: }
197:
198: function fc() {
199:    console.log('executing fc...');
200:    throw 'error in fc...'
201: }
202:
203: fa();

ブラウザのコンソール出力にスタックトレースが表示されます。

executing fa...                         code.js:189
executing fb...                         code.js:194
executing fc...                         cdoe.js:199
/* this is your stack trace */
Uncaught error in fc...                 code.js:200
    fc                                  code.js:200
    fb                                  code.js:195
    fa                                  code.js:190
    (anonymous function)                code.js:203

この助けを願っています。


3

関数:

function print_call_stack(err) {
    var stack = err.stack;
    console.error(stack);
}

使用事例:

     try{
         aaa.bbb;//error throw here
     }
     catch (err){
         print_call_stack(err); 
     }

2
<script type="text/javascript"
src="https://rawgithub.com/stacktracejs/stacktrace.js/master/stacktrace.js"></script>
<script type="text/javascript">
    try {
        // error producing code
    } catch(e) {
        var trace = printStackTrace({e: e});
        alert('Error!\n' + 'Message: ' + e.message + '\nStack trace:\n' + trace.join('\n'));
        // do something else with error
    }
</script>

このスクリプトはエラーを表示します


2
function stacktrace(){
  return (new Error()).stack.split('\n').reverse().slice(0,-2).reverse().join('\n');
}

2
このコードは質問に答えることがありますが、問題を解決する方法や理由に関する追加のコンテキストを提供すると、回答の長期的な価値が向上します。
ドナルドダック

1

ちょっとパーティーに遅刻しますが、arguments.calleeが使用可能かどうかを自動検出し、使用できない場合は新しいError()。stackを使用する別のソリューションを次に示します。クロム、サファリ、Firefoxでテストされています。

2つのバリアント-stackFN(n)は直接の呼び出し元から離れた関数nの名前を提供し、stackArray()は配列を提供します。stackArray()[0]は直接の呼び出し元です。

http://jsfiddle.net/qcP9y/6/でお試しください

// returns the name of the function at caller-N
// stackFN()  = the immediate caller to stackFN
// stackFN(0) = the immediate caller to stackFN
// stackFN(1) = the caller to stackFN's caller
// stackFN(2) = and so on
// eg console.log(stackFN(),JSON.stringify(arguments),"called by",stackFN(1),"returns",retval);
function stackFN(n) {
    var r = n ? n : 0, f = arguments.callee,avail=typeof f === "function",
        s2,s = avail ? false : new Error().stack;
    if (s) {
        var tl=function(x) { s = s.substr(s.indexOf(x) + x.length);},
        tr = function (x) {s = s.substr(0, s.indexOf(x) - x.length);};
        while (r-- >= 0) {
            tl(")");
        }
        tl(" at ");
        tr("(");
        return s;
    } else {
        if (!avail) return null;
        s = "f = arguments.callee"
        while (r>=0) {
            s+=".caller";
            r--;   
        }
        eval(s);
        return f.toString().split("(")[0].trim().split(" ")[1];
    }
}
// same as stackFN() but returns an array so you can work iterate or whatever.
function stackArray() {
    var res=[],f = arguments.callee,avail=typeof f === "function",
        s2,s = avail ? false : new Error().stack;
    if (s) {
        var tl=function(x) { s = s.substr(s.indexOf(x) + x.length);},
        tr = function (x) {s = s.substr(0, s.indexOf(x) - x.length);};
        while (s.indexOf(")")>=0) {
            tl(")");
            s2= ""+s;
            tl(" at ");
            tr("(");
            res.push(s);
            s=""+s2;
        }
    } else {
        if (!avail) return null;
        s = "f = arguments.callee.caller"
        eval(s);
        while (f) {
            res.push(f.toString().split("(")[0].trim().split(" ")[1]);
            s+=".caller";
            eval(s);
        }
    }
    return res;
}


function apple_makes_stuff() {
    var retval = "iPhones";
    var stk = stackArray();

    console.log("function ",stk[0]+"() was called by",stk[1]+"()");
    console.log(stk);
    console.log(stackFN(),JSON.stringify(arguments),"called by",stackFN(1),"returns",retval);
    return retval;
}



function apple_makes (){
    return apple_makes_stuff("really nice stuff");
}

function apple () {
    return apple_makes();
}

   apple();

1

このライブラリhttp://www.stacktracejs.com/を使用できます。これはとてもいいです

ドキュメントから

独自のエラーを渡して、IEまたはSafari 5では利用できないスタックトレースを取得することもできます。

<script type="text/javascript" src="https://rawgithub.com/stacktracejs/stacktrace.js/master/stacktrace.js"></script>
<script type="text/javascript">
    try {
        // error producing code
    } catch(e) {
        var trace = printStackTrace({e: e});
        alert('Error!\n' + 'Message: ' + e.message + '\nStack trace:\n' + trace.join('\n'));
        // do something else with error
    }
</script>

リンクされたソースは、https://rawgithub.com/stacktracejs/stacktrace.js/master/stacktrace.js(コード・スニペットをマッチング)、最新の安定版はここにある、古いバージョンである:https://raw.githubusercontent.com/stacktracejs/stacktrace.js/stable/stacktrace.js
フレデリックLeitenberger

1

最大のパフォーマンス(IE 6+)と最大の互換性を提供する答えがここにあります。IE 6と互換性があります!

    function stacktrace( log_result ) {
    	var trace_result;
    // IE 6 through 9 compatibility
    // this is NOT an all-around solution because
    // the callee property of arguments is depredicated
    /*@cc_on
    	// theese fancy conditinals make this code only run in IE
    	trace_result = (function st2(fTmp) {
    		// credit to Eugene for this part of the code
    		return !fTmp ? [] :
    			st2(fTmp.caller).concat([fTmp.toString().split('(')[0].substring(9) + '(' + fTmp.arguments.join(',') + ')']);
    	})(arguments.callee.caller);
    	if (log_result) // the ancient way to log to the console
    		Debug.write( trace_result );
    	return trace_result;
    @*/
    	console = console || Console;	// just in case
    	if (!(console && console.trace) || !log_result){
    		// for better performance in IE 10
    		var STerror=new Error();
    		var unformated=(STerror.stack || STerror.stacktrace);
    		trace_result = "\u25BC console.trace" + unformated.substring(unformated.indexOf('\n',unformated.indexOf('\n'))); 
    	} else {
    		// IE 11+ and everyone else compatibility
    		trace_result = console.trace();
    	}
    	if (log_result)
    		console.log( trace_result );
    	
    	return trace_result;
    }
// test code
(function testfunc(){
	document.write( "<pre>" + stacktrace( false ) + "</pre>" );
})();


0

Firefoxではスタックトレースを取得する方がIEで取得するよりも簡単ですが、基本的には次のようにします。

「問題のある」コードをtry / catchブロックで囲みます。

try {
    // some code that doesn't work
    var t = null;
    var n = t.not_a_value;
}
    catch(e) {
}

「エラー」オブジェクトの内容を調べると、次のフィールドが含まれています。

e.fileName:問題が発生したソースファイル/ページe.lineNumber:問題が発生したファイル/ページの行番号e.message:発生したエラーのタイプを説明する単純なメッセージe.name:タイプ発生したエラーの例、上記の例では 'TypeError'であるはずですe.stack:例外を引き起こしたスタックトレースが含まれています

これがお役に立てば幸いです。


1
違う。彼は自分の例外をキャッチしようとしています。「asdfg」をスローすると、例外オブジェクトではなく、文字列オブジェクトが取得されます。彼は組み込みの例外をキャッチしようとはしていません。
IvanVučica2009年

0

IE11を使用してsmartgwtで無限の再帰を調査する必要があったため、より深く調査するには、スタックトレースが必要でした。問題は、再現コンソールがそのように難しくなるため、開発コンソールを使用できなかったことです。
JavaScriptメソッドで以下を使用します。

try{ null.toString(); } catch(e) { alert(e.stack); }

alert((new Error())。stack);
リッチリマー

0

うわー-私はstackそれを使用する前に利用可能かどうかを最初に確認することを提案している6年間で一人を見ていない!エラーハンドラで実行できる最悪のことは、存在しないものを呼び出すためにエラーをスローすることです。

他の人が言ったように、stack現在はほとんど安全に使用できますが、IE9以前ではサポートされていません。

予期しないエラーをログに記録し、スタックトレースは非常に重要です。最大限のサポートを得るために、私は最初にError.prototype.stack存在していて、それが関数であるかどうかを確認します。その場合は、使用しても安全error.stackです。

        window.onerror = function (message: string, filename?: string, line?: number, 
                                   col?: number, error?: Error)
        {
            // always wrap error handling in a try catch
            try 
            {
                // get the stack trace, and if not supported make our own the best we can
                var msg = (typeof Error.prototype.stack == 'function') ? error.stack : 
                          "NO-STACK " + filename + ' ' + line + ':' + col + ' + message;

                // log errors here or whatever you're planning on doing
                alert(msg);
            }
            catch (err)
            {

            }
        };

編集:以降のように見えるstack財産ではなく、安全にも、古いブラウザでそれを呼び出すことができる方法です。Error.prototype以前はチェックが機能していて、今は機能しないので混乱しています。何が起こっているのかわかりません。


0

console.error(e.stack)Firefox を使用すると、ログにスタックトレースのみが表示され、Chromeにもメッセージが表示されます。メッセージに重要な情報が含まれている場合、これは予期せぬ事態になる可能性があります。常に両方を記録します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.