2011-11-22 5 views
24

RX를보다 쉽게 ​​디버그 가능하게 만드는 방법에 대한 아이디어를 찾고 있습니다. 소스가 결합기와 스로틀을 통과하여 게시 할 때 실패 지점을 찾는 것은 매우 어려울 수 있습니다.Reactive Extensions를 사용한 디버깅 트릭?

지금까지 복잡한 Enumerable 체인을 사용하는 것과 비슷한 일을 해왔습니다. Do()를 트레이싱에 삽입하고, 익명 타입 파트에 "name"필드를 추가하고 때로는 스택 트레이스를 잡습니다.하지만 우리는 아마 수백 명의 생산자와 아마 수천 명의 소비자를 우리 시스템에두고 있으며 문제를 격리하기가 매우 어려워지고 있습니다.

RX 사용을 디버깅하기 위해 어떤 종류의 트릭이 있습니까?

+2

위대한 질문입니다. 나는 항상 내 Rx 코드를 디버깅하기 위해 고심하고있다. – Tim

+7

나는 casperOne이 우연히 닫힌이 질문에 강력히 동의하지 않습니다. 나는 매우 구체적인 기술에 대한 전문 지식을 찾고 있습니다. 이 질문은 "의견, 논쟁, 논쟁, 여론 조사 또는 토론 확대"로 이어지지 않을 것입니다. – scobi

+1

건설적이지 않습니까? 어쩌면이 질문은 충분히 구체적인 것은 아니지만 매우 가치있는 질문입니다. 오, 글쎄, 왜 "이 코드가 컴파일되지 않는가?"라는 질문으로 돌아갑니다. –

답변

7

나는이 주제에 constructive discussion가 대신 쿼리에 애드혹 Do 연산자를 추가하는 2009 년

의 수신 포럼에 미친되었다고 생각, 당신은 사용자 정의 로그/추적 연산자를 추가합니다. 이 연산자는 Subscription, Disposal, OnNext, OnError 및 OnCompleted 이벤트를 캡처합니다. 구현에 따라 콘솔에 쓰거나, 좋아하는 Logger 라이브러리를 사용하거나, OS 및 Visual Studio 통합을 위해 ETW 이벤트를 만들 수도 있습니다.

public static class ObservableTrace 
{ 
    public static IObservable<TSource> Trace<TSource>(this IObservable<TSource> source, string name) 
    { 
     int id = 0; 
     return Observable.Create<TSource>(observer => 
     { 
      int id1 = ++id; 
      Action<string, object> trace = (m, v) => Debug.WriteLine("{0}{1}: {2}({3})", name, id1, m, v); 
      trace("Subscribe", ""); 
      IDisposable disposable = source.Subscribe(
       v => { trace("OnNext", v); observer.OnNext(v); }, 
       e => { trace("OnError", ""); observer.OnError(e); }, 
       () => { trace("OnCompleted", ""); observer.OnCompleted(); }); 
      return() => { trace("Dispose", ""); disposable.Dispose(); }; 
     }); 
    } 
} 
+0

시도해보십시오 + Seq http://www.lavinski.me/debugging-rx-with-seq/ –

11
수신 버그를 잡기위한 하나의 중요한 트릭,이하게 사용할 첫 번째 예외와 디버깅을 다시 시도하는 것입니다

그 방법이 더 당신이 재 throw 한 대신 실제 예외 메시지가 나타납니다 가능성이 높습니다 :

+0

사람들이 처음 기회를 잡으러 예외를 설정하지 않으면 나는 항상 놀란다. 그것은 날지 못하는 비행과 같습니다. – scobi

+0

Rx는 시간에 따라 달라지기 때문에 스테핑 스루는 종종 옵션이 아닙니다. 추적은 시간에 민감한 디버깅에 사용됩니다. –

+0

이 화면은 디버그> 예외 (옵션이 아님)에서 사용할 수 있습니다. https://msdn.microsoft.com/en-us/library/d14azbfh.aspx –

관련 문제