2014-03-27 1 views
1

저는 nhibernate/castle Windsor, wcf 서비스 및 모든 종류의 짐승을 사용하여 상당한 프로젝트를 상속 받았습니다. 이 시스템은 값을 계산 한 다음 모든 곳으로 메시지와 데이터를 보내는 처리 도구입니다.모든 함수 호출 및 매개 변수보기

시스템이 크고 복잡하며 디버그하기가 쉽지 않습니다.

저는 몇 가지 시나리오를 실행하고 모든 상황에 맞는 시각적 인지도를 얻을 수 있도록 어떤 함수가 호출되는지, 어떤 매개 변수로 어떻게 표시되는지에 대한 방법/도구/아이디어를 찾고 있습니다. 함께.

1) 디버그 - 예 제가 할 수 있음을 알고 있지만 코드를 검토하지 않고 일종의지도를 생성하는 도구를 얻고 싶습니다. 나는 지금 비즈니스 로직에 집중하고 싶다.

2) 로그 문/log4net - 많은 코드를 변경/추가해야하기 때문에 원하지 않습니다.

3) 디버그 중에 콜 스택 (callstack)을 봅니다. - 정보가 너무 많지 않고 마지막 몇 건의 호출 만합니다.

아마 내가 할 수있는 플러그인은 아마도 다음과 같습니다. 내 프로세스 실행 -> 호출 된 메소드 목록 및 매개 변수 전달 된 파일.

감사

답변

0

내가 postsharp (http://www.postsharp.net/diagnostics)를 사용하여 과거에 이런 짓을했습니다. 두 번째 제안은 효과가 있으며 많은 변경 사항을 도입 할 필요가 없습니다.

postsharp를 컴파일 후에 다시 작성하여 모든 메소드 호출에 자동으로 연결하고 log4net과 같은 것을 사용하여 전달 된 것을 기록하여 응용 프로그램이 수행하는 작업에 대한 자세한 추적을 제공 할 수 있습니다. 당신이해야 할 일은 postsharp에 대한 참조를 추가하고 postsharp에게 로그 할 내용을 알려주는 속성을 assemblyinfo 클래스에 추가하는 것입니다 (새 진단 마법사가 자동으로 그렇게하지 않으면)

나는 그것을하고있다. 무료 포스트 샤프 라이센스를 사용하여 제작할 때 - 필자는 내 측면 (OnMethodBoundaryAspect 구현)을 끝내고 한 줄의 코드를 사용하여 매우 큰 레거시 제품의 모든 메소드에 연결하여 진단 패턴 라이브러리를 포스트 샤프에서 사용할 수있게되었습니다.

0

Castle.Windsor가 있기 때문에 모든 기능에 대한 모든 호출을 기록하지는 않을 것입니다. 대신 Castle.Windsor 차단 기능을 사용하는 것이 좋습니다 경계 사이의 구성 요소 간 통신은입니다. 이 방법을 사용하면 구성 요소가 함께 살아가는 방법, 상호 작용 방법 및 응용 프로그램의 구성 방법에 대해 한눈에 파악할 수 있습니다.

일련의 가능한 모든 일련 번호 대신 class.function 시스템

IControllerFactory.Resolve 
IController.Process 
IBindingEngine.BuildModel 
etc... 

그런 이유로 Castle.Windsor IInterceptor을 사용해야합니다.다음은 이러한 인터셉터는이 라인

_container.Register(
      Classes.FromAssemblyInThisApplication() 
      .BasedOn<IInterceptor>() 
      .WithServiceBase() 
      .Configure(c => c.Named(c.Implementation.Name)) 
     ); 

을 따라 뭔가 될 것 등록

public class LoggingInterceptor : IInterceptor 
{ 
    public ILogger Logger { get; set; } 

    public void Intercept(IInvocation invocation) 
    { 

     Logger.Debug(() => 
     { 
      return String.Format("calling {0}.{1}" 
           , invocation.TargetType.Name 
           , invocation.Method.Name); 
      // add whatever information is important 
      // you can even dump the values of your parameters 
     }); 

     invocation.Proceed(); 
    } 
} 

어떻게 보이는지의 예입니다 그리고 당신은 당신이를 사용하여 추적 할 필요가 구성 요소에 추가합니다 선택한 등록에 대한 Interceptors("LoggingInterceptor") 방법.