어떤 프로그래밍 언어에서든, 나는 어떤 함수를 추적 할 수 있고 어떤 함수가 다른 함수에 의해 호출되는지 알 수있다. 하지만 자바 스크립트에서, 나는 코드가 내게이 아니고 방화 광이이 기능을 제공하지 않기 때문에 - 내가 아는 한, 어떻게 알지 못한다.자바 스크립트 이벤트를 추적하는 방법 (스택 추적)?
예 : 나는 XYZ 요소를 클릭 할 때 호출되는 각 기능의 함수 이름을 표시하고 순서대로 표시 할
.
감사합니다.
어떤 프로그래밍 언어에서든, 나는 어떤 함수를 추적 할 수 있고 어떤 함수가 다른 함수에 의해 호출되는지 알 수있다. 하지만 자바 스크립트에서, 나는 코드가 내게이 아니고 방화 광이이 기능을 제공하지 않기 때문에 - 내가 아는 한, 어떻게 알지 못한다.자바 스크립트 이벤트를 추적하는 방법 (스택 추적)?
예 : 나는 XYZ 요소를 클릭 할 때 호출되는 각 기능의 함수 이름을 표시하고 순서대로 표시 할
.
감사합니다.
: A javascript stacktrace in any browser는, James은 단순히 코드를 디버깅 할 경우 그들이 github account now
function printStackTrace() {
var callstack = [];
var isCallstackPopulated = false;
try {
i.dont.exist+=0; //doesn't exist- that's the point
} catch(e) {
if (e.stack) { //Firefox
var lines = e.stack.split('\n');
for (var i=0, len=lines.length; i<len; i++) {
if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {
callstack.push(lines[i]);
}
}
//Remove call to printStackTrace()
callstack.shift();
isCallstackPopulated = true;
}
else if (window.opera && e.message) { //Opera
var lines = e.message.split('\n');
for (var i=0, len=lines.length; i<len; i++) {
if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {
var entry = lines[i];
//Append next line also since it has the file info
if (lines[i+1]) {
entry += " at " + lines[i+1];
i++;
}
callstack.push(entry);
}
}
//Remove call to printStackTrace()
callstack.shift();
isCallstackPopulated = true;
}
}
if (!isCallstackPopulated) { //IE and Safari
var currentFunction = arguments.callee.caller;
while (currentFunction) {
var fn = currentFunction.toString();
var fname = fn.substring(fn.indexOf("function") + 8, fn.indexOf('')) || 'anonymous';
callstack.push(fname);
currentFunction = currentFunction.caller;
}
}
output(callstack);
}
function output(arr) {
// Output however you want
alert(arr.join('\n\n'));
}
DynaTrace AJAX에는 이와 같은 기능이 있습니다. 정확하게 당신이 찾고있는 것은 아니지만 요소에 묶인 이벤트와 함수를 제공하고 문제 해결에 도움이됩니다. 무료 다운로드가 있었는지 확인하십시오.
stack()
함수 호출 (Firefox의 경우)에서 스택 추적을 확인할 수 있습니다.
function getStackTrace() {
try {
unusedVariable++; // This creates an error we can trace
}
catch (e) {
return e.stack;
}
}
다른 브라우저는 스택 추적을 인쇄의 다른 방법을 가지고 있지만, 이것은 당신이 파이어 폭스에 필요한 무엇을 얻어야한다 : 간단한 함수를 작성하면 스택 추적은 다음과 같이 볼 수 있었다 인쇄합니다.
희망이 도움이됩니다. 이 발견
적어도 Firefox 3.6.6에서는 e.stack이어야합니다. –
수정하십시오.두뇌에 너무 많은 파이썬이 있습니다 :-) (지금 고정) – godswearhats
을 말한다, 당신의 최선의 선택은 당신의 브라우저 디버거 플러그인을 얻는 것입니다. Firebug 플러그인은 스택 추적을 제공합니다. (see here)
코드 내에서 수행하려는 경우이를 수행 할 수있는 JavaScript의 표준 언어 기능이 없습니다. 다른 브라우저 은 비표준 확장을 구현할 수 있지만 의존하지 않아야합니다.
"카사 블랑카"는 언급으로 ... 상기 JS-스택 트레이스 ( http://www.eriwen.com/javascript/js-stack-trace/)의 사이트에서 유의하시기 바랍니다 파이어 폭스와 크롬에서 그 :
명백한 쉬운 방법 : 방화범, 크롬 데브 도구, 잠자리 등
자바 스크립트 나 Firebug 콘솔에서 console.trace()를 호출하면 언제든지 쉽게 스택 추적을 얻을 수 있습니다.
그들은 github 사이트를 가지고 있습니다. https://github.com/eriwen/javascript-stacktrace –
고맙습니다. James, 정말 고맙습니다. 답변을 업데이트하겠습니다. –