2010-12-15 3 views
4

JScript를 실행하는 스크립트 호스트가 있습니다. 노출 된 객체의 메소드가 호출되고 호출 된 곳에서 추적해야하는 경우가 있습니다. 이를 위해 현재 객체의 메서드 내에있는 스크립트 엔진이 어디에 있는지 확인해야합니다.자동화 호출 내에서 스크립트 소스 위치가 어떻게 결정됩니까?

내 사이트의 OnScriptError가 호출 될 때와 같은 정보 (원본 소스 소스 문자 및 ParseScriptText로 전달 된 쿠키) 여야합니다.

이 정보를 오류없이 생성 할 수 있습니까?

+0

(https://github.com/emwendelin/Javascript-Stacktracehttp://eriwen.com/javascript/stacktrace-update/에서) 내가 내 호스트 디버깅 기능을 추가하는 경우 도움이 될 것으로 보인다. 문제는이 기능을 추가 한 두 가지 설명에서 Visual Studio 또는 MS Script Debugger가 설치된 경우에만 Windows에있는 "프로세스 디버그 관리자"COM 개체의 인스턴스화를 의미합니다. 내 사용자에게는 그 중 하나가 없을 가능성이 큽니다. – r4w8173

+0

웹에서 몇 가지 비슷한 질문을 찾았지만 어떤 대답도없이 이상하게 보입니다. "이것은 불가능합니다"라고 대답하는 유형조차도 아닙니다. 나는이 사실을 아무도 모르는 것이 궁금합니다. – r4w8173

+0

어떤 COM 구성 요소를 사용하고 있습니까? 문서를 살펴 봤어? –

답변

0

다음 코드를 시도해 보셨습니까? 이 함수는 함수 이름과 인수 값이 있지만 줄 번호가없는 완전한 스택 추적을 제공해야합니다.

ParseScriptText의 정의를 모릅니다.

는 웹을 통해 참조에서

other: function(curr) { 
    var ANON = '{anonymous}', fnRE = /function\s*([\w\-$]+)?\s*\(/i, 
     stack = [], fn, args, maxStackSize = 10; 

    while (curr && stack.length < maxStackSize) { 
     fn = fnRE.test(curr.toString()) ? RegExp.$1 || ANON : ANON; 
     args = Array.prototype.slice.call(curr['arguments']); 
     stack[stack.length] = fn + '(' + this.stringifyArguments(args) + ')'; 
     curr = curr.caller; 
    } 
    return stack; 
}, 
+0

이것은 브라우저의 JavaScript에 대한 정보가 아닙니다. 이것은 자신의 응용 프로그램에서 호스팅되는 Microsoft의 JScript 엔진에 관한 것입니다. 원래 질문에 대한 의견을 읽으십시오. – r4w8173

+0

이것이 JScript에서 왜 작동하지 않아야합니까? 이 함수를 코드에 추가하고 나중에 델파이에서 호출 할 수 있습니다. – kaboom

+0

나는 그것에 대해서도 생각했다. 그러나 문제는 실행 포인트가있는 코드 덩어리를 결정할 수 없다는 것이다. HTML과 같이 하나 이상의 JScript 코드 블록이 있습니다. 좀 더 복잡한 형태로 제안한 솔루션은 현재 임시 솔루션이지만 100 % 달성하지 못했습니다. – r4w8173

관련 문제