시각화 도우미 아키텍처
디버거 시각화 도우미의 아키텍처는 두 부분으로 구성되어 있습니다.
디버거(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.GetObject는 Microsoft.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를 호출하여 Stream
을 CreateReplacementObject에 전달합니다.
Replace 메서드 중 하나를 사용하면 디버기에서 시각화 대상 개체를 대체하는 새 데이터 개체가 만들어집니다. 원래 개체를 바꾸지 않고 내용을 변경하려는 경우에는 다음 표에 나와 있는 Transfer 메서드 중 하나를 사용합니다. 이들 API는 시각화 대상 개체를 바꾸지 않고 데이터를 양방향으로 동시에 전송합니다.
개체 공급자 | 개체 소스 |
---|---|
TransferData 또는 TransferObject |
TransferData |