다음을 통해 공유


시각화 도우미 아키텍처

디버거 시각화 도우미의 아키텍처에는 다음 두 부분이 있습니다.

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

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

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

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

디버거 프로세스 디버기 프로세스
디버거 사용자 인터페이스(DataTips, 조사식 창, 빠른 보기) 시각화할 데이터 개체

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

디버거 측의 코드는 그 자체의 고유한 사용자 인터페이스를 만드는데, 이는 데이터팁, 조사식 창 또는 퀵워치와 같은 디버거 인터페이스에서 호출할 수 있습니다. 시각화 인터페이스는 DialogDebuggerVisualizer 클래스와 IDialogVisualizerService 인터페이스를 사용하여 만들어집니다. 모든 시각화 도우미 API와 마찬가지로 DialogDebuggerVisualizer 및 IDialogVisualizerService는 네임스페이 Microsoft.VisualStudio.DebuggerVisualizers 스에 있습니다.

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

IDialogVisualizerService 인터페이스
데이터 객체

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

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

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

디버그 대상 측에는 객체 소스라는 해당하는 객체가 있습니다.

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

IDialogVisualizerService 인터페이스
데이터 객체
개체 공급자(구현 IVisualizerObjectProvider) "VisualizerObjectSource"로부터 파생된 개체 원본

개체 공급자는 시각화 도우미 UI에 시각화할 개체 데이터를 제공합니다. 개체 공급자는 개체 원본에서 개체 데이터를 가져옵니다. 개체 공급자 및 개체 원본은 디버거 쪽과 디버기 쪽 간에 개체 데이터를 통신하는 API를 제공합니다.

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

오브젝트 프로바이더 개체 소스
GetData

-또는—

GetObject
GetData

개체 공급자는 둘 중 하나를 GetDataGetObject사용할 수 있습니다. API 중 하나라도 GetData 개체 원본을 호출하게 됩니다. 호출은 Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.GetData을 통해, 시각화되는 객체의 직렬화된 형식을 나타내는 System.IO.Stream을 채웁니다.

Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject 데이터를 개체 형식으로 다시 역직렬화한 다음, 만든 DialogDebuggerVisualizerUI에 표시할 수 있습니다. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData 는 데이터를 원시 Stream로 채우며, 이를 직접 역직렬화해야 합니다. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObjectStream를 직렬화된 상태로 얻기 위해 Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData을(를) 호출하고, 그런 다음 데이터를 역직렬화하여 작동합니다. .NET에서 개체를 직렬화할 수 없으며 사용자 지정 serialization이 필요한 경우에 사용합니다 Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData . 이 경우 메서드 Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.Serialize도 재정의해야 합니다.

읽기 전용 시각화 도우미를 만드는 경우 단방향 통신으로 GetData 충분하거나 GetObject 충분합니다. 데이터 개체의 편집을 지원하는 시각화 도우미를 만드는 경우 더 많은 작업을 수행해야 합니다. 개체 공급자에서 개체 원본으로 데이터 개체를 다시 보낼 수 있어야 합니다. 다음 표에서는 이 용도로 사용되는 개체 공급자 및 개체 원본 API를 보여 줍니다.

오브젝트 프로바이더 개체 소스
ReplaceData

-또는—

ReplaceObject
CreateReplacementObject

개체 공급자가 사용할 수 있는 두 가지 API가 있습니다. 데이터는 항상 객체 공급자로부터 객체 소스로 Stream 전송되지만, ReplaceData은 객체를 Stream로 직접 직렬화할 것을 요구합니다.

ReplaceObject 은 제공한 개체를 가져와 Stream로 직렬화한 다음, ReplaceData를 호출하여 StreamCreateReplacementObject로 보냅니다.

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

오브젝트 프로바이더 개체 소스
TransferData

-또는—

TransferObject
TransferData