2016-08-18 5 views
12

Angular2에서 비동기 코드의 호출 스택을 향상시킬 수있는 방법이 있습니까? 나는 항상 setTimeout(), 방출 된 이벤트, 약속 등의 실행 컨텍스트를 추적하는 것이 Zone의 장점 중 하나라고 생각 했습니까?Angular2 : 디버깅을위한 더 나은/더 깊은 영역 스택

나는 오류를 추적하는 것을 불가능하게 만드는 일반적인 시나리오를 보여주는 엄청난 예제를 만들었습니다.

나는 다음과 같은 예제 시나리오가 있습니다

@Component({ 
    selector: 'my-component', 
    template: ` 
    <div> 
     <button (click)="doSmth()">Cause an async error!</button> 
    </div> 
    ` 
}) 
export class MyComponent { 
    @Output() error = new EventEmitter<any>(true); 

    public doSmth(): void { 
    this.error.emit('Oh snap!'); 
    } 
} 

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div> 
     <my-component (error)="handleError($event)"></my-component> 
    </div> 
    `, 
}) 
export class App { 
    private error = ""; 

    public handleError(reason: any): void { 
    Promise.reject(reason) 
    } 
} 

@NgModule({ 
    imports: [ BrowserModule ], 
    declarations: [ App, MyComponent ], 
    bootstrap: [ App ] 
}) 
export class AppModule {} 

Plunker : "오 스냅"https://embed.plnkr.co/rnkxRH9G0FzA3DcBHfKO/

이 잘린 비동기 오류가 발생을 버튼을 클릭하면 이 오류는 처리되지 않은 Promise 거부가 발생하는 App 구성 요소에서 처리되는 EventEmitter를 통해 발생합니다. 내가 지금 얻을

호출 스택은 다음과 같습니다 : 나에게 더 복잡한 응용 프로그램에서 실제 오류 트리거 기원을 추적 할 기회를주지 않았

Error: Oh Snap! 
at resolvePromise (zone.js:538) 
at Function.ZoneAwarePromise.reject (zone.js:594) 
at App.handleError (app.ts:34) 
at DebugAppView._View_App0._handle_error_3_0 (App.ngfactory.js:82) //not my file 
at eval (core.umd.js:12718) 
at eval (core.umd.js:9180) 
at ZoneDelegate.invokeTask (zone.js:356) 
at Object.onInvokeTask (core.umd.js:9236) 
at ZoneDelegate.invokeTask (zone.js:355) 
at Zone.runTask (zone.js:256) 

합니다.

또한 "long-stack-trace-zone"스크립트를 임베드했습니다.이 스크립트는 전혀 효과가 없습니다.

질문 : 더 나은 존 스택 트레이스를 얻으려면 어떻게해야합니까? 아니면 전혀 가능합니까?

미리 감사드립니다.

답변

1

해결책은 Exception을 깨기 위해 "Chrome DevTools"를 사용하는 것입니다. 크롬 DevTools로의 해당 들어

, 다음을 수행해야합니다

  1. Break on uncaught exceptions
  2. 사용 Blackboxing
에 관심이있는 코드 만 파괴하기 위해