다음을 통해 공유


시각화 도우미 아키텍처

디버거 시각화 도우미의 아키텍처는 두 부분으로 구성되어 있습니다.

  • 디버거(debugger) 쪽 코드는 Visual Studio 디버거 내에서 실행됩니다. 디버거 쪽 코드에서는 시각화 도우미의 사용자 인터페이스를 만들고 표시합니다.

  • 디버기(debuggee) 쪽 코드는 Visual Studio가 디버깅하는 프로세스(디버기) 내에서 실행됩니다.

    시각화 도우미는 디버거에서 데이터 개체의 내용을 의미 있고 이해할 수 있는 형식으로 표시(시각화)하는 데 사용되는 디버거 구성 요소입니다. 일부 시각화 도우미에서는 데이터 개체를 편집할 수도 있습니다. 사용자 지정 시각화 도우미를 작성하면 고유한 사용자 지정 데이터 형식을 처리하도록 디버거를 확장할 수 있습니다.

    시각화할 데이터 개체는 디버깅할 프로세스(디버기 프로세스) 내에 있습니다. 데이터를 표시하는 사용자 인터페이스는 Visual Studio 디버거 프로세스 내에서 만들어집니다.

디버거 프로세스 디버기 프로세스
디버거 사용자 인터페이스(DataTip, 조사식 창, 간략한 조사식) 시각화할 데이터 개체

디버거 인터페이스 내에서 데이터 개체를 시각화하려면 두 프로세스 사이에서 통신하는 코드가 필요합니다. 따라서 시각화 도우미 아키텍처는 디버거 쪽 코드와 디버기 쪽 코드라는 두 부분으로 구성됩니다.

디버거 쪽 코드에서는 DataTip, 조사식 창, 간략한 조사식 등의 디버거 인터페이스에서 호출할 수 있는 자체 사용자 인터페이스를 만듭니다. 시각화 도우미 인터페이스는 DialogDebuggerVisualizer 클래스와 IDialogVisualizerService 인터페이스를 사용하여 만들어집니다. 모든 시각화 도우미 API와 마찬가지로 DialogDebuggerVisualizer 및 IDialogVisualizerService는 Microsoft.VisualStudio.DebuggerVisualizers 네임스페이스에 있습니다.

디버거 쪽 디버기 쪽
DialogDebuggerVisualizer 클래스

IDialogVisualizerService 인터페이스
데이터 개체

사용자 인터페이스를 통해 디버거 쪽에 있는 개체 공급자에서 시각화할 데이터를 가져옵니다.

디버거 쪽 디버기 쪽
DialogDebuggerVisualizer 클래스

IDialogVisualizerService 인터페이스
데이터 개체
개체 공급자(IVisualizerObjectProvider 구현)

디버기 쪽에는 개체 소스라는 해당 개체가 있습니다.

디버거 쪽 디버기 쪽
DialogDebuggerVisualizer 클래스

IDialogVisualizerService 인터페이스
데이터 개체
개체 공급자(IVisualizerObjectProvider 구현) 개체 소스(VisualizerObjectSource에서 파생)

개체 공급자는 시각화 도우미 UI에 시각화할 개체 데이터를 제공합니다. 개체 공급자는 개체 소스에서 개체 데이터를 가져옵니다. 개체 공급자와 개체 소스는 디버거 쪽과 디버기 쪽 사이에 개체 데이터를 주고받는 API를 제공합니다.

모든 시각화 도우미는 시각화할 데이터 개체를 가져와야 합니다. 다음 표에서는 이러한 용도로 개체 공급자와 개체 소스에서 사용되는 해당 API를 보여 줍니다.

개체 공급자 개체 소스
GetData

또는

GetObject
GetData

개체 공급자는 GetData 또는 GetObject를 사용할 수 있습니다. 두 가지 API 모두 개체 소스를 대상으로 GetData를 호출하게 됩니다. Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.GetData를 호출하면 시각화 대상 개체의 serialize된 형식을 나타내는 System.IO.Stream이 채워집니다.

Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject는 데이터를 다시 개체 양식으로 역직렬화합니다. 그런 다음, DialogDebuggerVisualizer를 사용하여 만든 UI에 이 개체 양식을 표시할 수 있습니다. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData는 사용자가 직접 역직렬화해야 하는 원시 Stream으로 데이터를 채웁니다. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObjectMicrosoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData를 호출하여 직렬화된 Stream을 가져온 다음, 데이터를 역직렬화하는 방식으로 작동합니다. .NET을 통해 개체를 serialize할 수 없고 사용자가 직접 serialize해야 하는 경우에는 Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData를 사용합니다. 이러한 경우 Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.Serialize 메서드도 재정의해야 합니다.

읽기 전용 시각화 도우미를 만드는 경우에는 GetData 또는 GetObject를 사용한 단방향 통신으로도 충분합니다. 데이터 개체 편집을 지원하는 시각화 도우미를 만드는 경우에는 더 많은 단계를 거쳐야 합니다. 이러한 경우 개체 공급자에서 개체 소스로 데이터 개체를 다시 전달할 수도 있어야 합니다. 다음 표에서는 이러한 용도로 사용되는 개체 공급자 및 개체 소스 API를 보여 줍니다.

개체 공급자 개체 소스
ReplaceData

또는

ReplaceObject
CreateReplacementObject

이 경우에도 개체 공급자에서 두 가지 API를 사용할 수 있습니다. 데이터는 항상 개체 공급자에서 개체 소스로 Stream으로 전달되지만 ReplaceData를 사용하는 경우 사용자가 개체를 Stream으로 serialize해야 합니다.

ReplaceObject는 사용자가 제공한 개체를 받아 Stream으로 serialize한 다음 ReplaceData를 호출하여 StreamCreateReplacementObject에 전달합니다.

Replace 메서드 중 하나를 사용하면 디버기에서 시각화 대상 개체를 대체하는 새 데이터 개체가 만들어집니다. 원래 개체를 바꾸지 않고 내용을 변경하려는 경우에는 다음 표에 나와 있는 Transfer 메서드 중 하나를 사용합니다. 이들 API는 시각화 대상 개체를 바꾸지 않고 데이터를 양방향으로 동시에 전송합니다.

개체 공급자 개체 소스
TransferData

또는

TransferObject
TransferData