web-dev-qa-db-ja.com

V8 JavaScriptの行番号へのアクセス(ChromeとNode.js)

Cのような言語で時間を費やしたJavaScript開発者は、行番号のロギングや現在のメソッドがどのメソッドから呼び出されたかなど、特定のタイプのイントロスペクションを使用できないことがよくあります。 V8(Chrome、Node.js)を使用している場合は、次を使用できます。

58
james_womack
Object.defineProperty(global, '__stack', {
  get: function(){
    var orig = Error.prepareStackTrace;
    Error.prepareStackTrace = function(_, stack){ return stack; };
    var err = new Error;
    Error.captureStackTrace(err, arguments.callee);
    var stack = err.stack;
    Error.prepareStackTrace = orig;
    return stack;
  }
});

Object.defineProperty(global, '__line', {
  get: function(){
    return __stack[1].getLineNumber();
  }
});

console.log(__line);

上記は19

と組み合わせ arguments.callee.callerマクロを介してCで得られる便利なロギングのタイプに近づけることができます。

91
james_womack