program tip

chrome 또는 firefox를 사용하여 javascript에서 console.trace ()의 결과를 얻는 방법은 무엇입니까?

radiobox 2020. 9. 14. 08:17
반응형

chrome 또는 firefox를 사용하여 javascript에서 console.trace ()의 결과를 얻는 방법은 무엇입니까?


console.trace()콘솔에 결과를 출력합니다.
결과를 문자열로 가져 와서 파일에 저장하고 싶습니다.

나는 함수의 이름을 정의하지 않으며 callee.caller.name.


파이어 폭스에 대해 잘 모르겠지만 v8 / chrome에서는라는 오류 생성자에 대한 메서드를 사용할 수 있습니다 captureStackTrace. ( 여기에 더 많은 정보 )

그래서 그것을 얻는 해키 방법은 다음과 같습니다.

var getStackTrace = function() {
  var obj = {};
  Error.captureStackTrace(obj, getStackTrace);
  return obj.stack;
};

console.log(getStackTrace());

일반적으로 getStackTrace캡처되면 스택에 있습니다. 두 번째 인수 getStackTrace는 스택 추적에 포함되지 않습니다.


Error.stack이 필요합니다. Chrome 및 Firefox에서 작동합니다. 예를 들면

try { var a = {}; a.debug(); } catch(ex) {console.log(ex.stack)}

Chrome에서 줄 것입니다.

TypeError: Object #<Object> has no method 'debug'
    at eval at <anonymous> (unknown source)
    at eval (native)
    at Object._evaluateOn (unknown source)
    at Object._evaluateAndWrap (unknown source)
    at Object.evaluate (unknown source)

그리고 Firefox에서 :

@http://www.google.com.ua/:87 _firebugInjectedEvaluate("with(_FirebugCommandLine){try { var a = {}; a.debug() } catch(ex) {console.log(ex.stack)}\n};")
@http://www.google.com.ua/:87 _firebugEvalEvent([object Event])
@http://www.google.com.ua/:67

그러면 최신 Chrome, Firefox, Opera 및 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의 축소 된 텍스트가 의도 한 작은 작업에 비해 매우 큽니다.


크로스 브라우저 스택 추적을 제공하는 stacktrace.js 라는 라이브러리가 있습니다 . 스크립트를 포함하고 언제든지 호출하여 간단히 사용할 수 있습니다.

var trace = printStackTrace();

This is only a minor enhancement to Konstantin's excellent code. It cuts a bit on the expense of throwing-catching and just instantiates the Error stack:

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

I usually want a specific level of stack trace (for my custom logger) so this is also possible when calling:

getStackTrace()[2]; // get stack trace info 2 levels-deep

you only need var stack = new Error().stack. this is simplified version of @sgouros answer.

function foo() {
  bar();
}
function bar() {
  baz();
}
function baz() {
  console.log(new Error().stack);
}

foo();

Probably will not work in every browser (works in Chrome).

참고URL : https://stackoverflow.com/questions/6715571/how-to-get-result-of-console-trace-as-string-in-javascript-with-chrome-or-fire

반응형