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).
'program tip' 카테고리의 다른 글
div에 jQuery "깜박이는 하이라이트"효과? (0) | 2020.09.15 |
---|---|
그립을 통해서만 크기를 조정할 수있는 테두리없이 WPF 창을 만드는 방법은 무엇입니까? (0) | 2020.09.15 |
C ++ 11 용 Sequence-zip 함수? (0) | 2020.09.14 |
단일 Maven 플러그인 실행을 실행 하시겠습니까? (0) | 2020.09.14 |
중첩 된 컨트롤이있는 DesignMode (0) | 2020.09.14 |