문제

내 코드의 어떤 함수에서 스택 추적을보고 싶습니다.

public function PrintStackTrace() {
    try {
        throw new Error('StackTrace');
    } catch (e:Error) {
        trace(e.getStackTrace());
    }
}

나는 이것을 할 다른 방법이 있는지 알고 싶습니다. 어떤 곳에서는 오류 클래스가 스택 추적을 생성하지만 ActionScript 3.0으로는 수행하지 않았으므로 아마도 포도가 없지만 알고 싶습니다.

감사!

도움이 되었습니까?

해결책

내가 아는 한, 스택 추적을 자신의 코드에 사용할 수 있도록하는 유일한 방법은 getStacktrace () 이미하고있는 것처럼 오류 클래스의 메소드. 그러나 귀하의 질문의 예에 대한 응답으로 실제로 오류를 던질 필요가 없다고 언급합니다. 오류를 만들고 메소드를 호출 할 수 있습니다.

var tempError:Error = new Error();
var stackTrace:String = tempError.getStackTrace();

또한 설명서에서 말한 것처럼 이것은 Debug 버전의 Flash Player에서만 작동 하므로이 기능을 IF 블록으로 랩하여 값을 확인할 수 있습니다. 기능. ISDEBUGGER 네가 원한다면.

다른 팁

Flash Player 11.5에서 스택 트레이스는 플레이어의 비 데그거 버전으로도 제공됩니다.

Flex SDK와 함께 제공되는 Flex Debugger (FDB)를 사용하십시오. 온라인 (디버그 버전 인 경우)을 디버그 할 수있는 명령 줄 디버거입니다. 브레이크 포인트, 인쇄/변경 변수를 설정하고 스택을 덤프 할 수 있으며 추가 코드를 추가 할 필요는 없습니다. 당신이 없어서는 안되는 매우 유용한 도구입니다!

필요한 FDB 옵션은 '브레이크'이며 실행을 중단하려는 클래스 및 라인을 지정하고 'BT'또는 'info stack'을 지정하여 스택의 뒤쪽 트레이스를 제공합니다. 응용 프로그램이 실행되는 동안 거의 모든 것을 표시 할 수도 있습니다.

@hasseg가 맞습니다. SWF를 컴파일 할 때 -compiler.verbose -stacktraces = true를 제공하여 릴리스 버전 (디버그 아님)에서 스택 트레이스 정보를 보존 할 수도 있습니다.

이 작은 기능을 모았습니다.

public static function getStackTrace() : String
{
    var aStackTrace : Array = new Error().getStackTrace().split("\n");
    aStackTrace.shift();
    aStackTrace.shift();
    return "Stack trace: \n" + aStackTrace.join("\n");
}

이 기능을 개발할 때 앱과 함께 사용하는 사용자 정의 "디버그"클래스에 있습니다. 두 shift () 호출은 첫 번째 두 줄을 제거합니다. 첫 번째 라인은 단지 문자열 "오류"이고 두 번째 줄은이 함수 자체를 나타 내기 때문에 유용하지 않습니다. 다른 Shift () 호출을 추가하여 원하는 경우 (getStacktrace () 함수에 호출을 배치하는 줄을 지칭하는 줄을 지칭)를 제거 할 수도 있지만 "스택의 시작점으로 사용하도록 남겨 두었습니다. 추적하다".

var tempError:Error = new Error();
var stackTrace:String = tempError.getStackTrace();

이것을 쓰십시오 stackTrace 실행 모드에서 프로그램의 로그를 볼 수 있도록 모든 파일에 문자를 넣습니다. 따라서 디버거 모드에서만 실행할 필요가 없습니다. 그것을 작성하십시오 uncaughtexception 응용 프로그램 이벤트 이벤트이므로 마지막으로 실행됩니다.

플래시 11.5 기준으로 스택 추적은 플래시의 릴리스 버전에서 작동합니다.

그러나 이것이 이것이 더 이상 문제가되지 않는다는 것을 의미하지는 않습니다. 애플리케이션이 11.5 인 이상의 컴파일러를 사용하도록 설정된 경우 Flash Builder --> Project properties --> ActionScript Compiler, 당신은 스택 추적이 없습니다.

또한 동일한 페이지에서 Air SDK 버전을 볼 수 있습니다. v3.4 이상을 사용하는 경우 스택 추적이 표시되지 않습니다. 이것이 당신의 문제라면, 모든 개발자는 지침에 따라 Air SDK를 업데이트해야합니다. 여기.

그만큼 getStackTrace 메소드는 디버그 플래시 플레이어에서만 스택 추적을 반환합니다 (https://www.adobe.com/support/flashplayer/debug_downloads.html), 릴리스 플레이어가 반환합니다 null. 디버그 플레이어가 설치되어 실행되었는지 확인하십시오.

그만큼 -compiler.verbose-stacktraces=true 디버그 스택 추적에 라인 번호 만 추가합니다.

샘플 테스트 :https://gist.github.com/pipeno/03310d3d3cae61460ac6c590c4f355ed

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top