디버거 시각화 도우미의 아키텍처에는 다음 두 부분이 있습니다.
디버거 쪽은 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.GetObject는 Stream를 직렬화된 상태로 얻기 위해 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를 호출하여 Stream를 CreateReplacementObject로 보냅니다.
Replace 메서드 중 하나를 사용하면 시각화되는 개체를 대체하는 새 데이터 개체가 디버기에서 만들어집니다. 원래 개체의 내용을 바꾸지 않고 변경하려면 다음 표에 표시된 Transfer 메서드 중 하나를 사용합니다. 이러한 API는 시각화되는 개체를 대체하지 않고 양방향으로 데이터를 동시에 전송합니다.
| 오브젝트 프로바이더 | 개체 소스 |
|---|---|
| TransferData -또는— TransferObject |
TransferData |