Megosztás a következőn keresztül:


Egyéni adatábrázolók a Visual Studio hibakeresőhöz (.NET)

Fontos

A Visual Studio 2022 17.9-es verziójától kezdve a vizualizációk mostantól az új VisualStudio.Bővíthetőségi modellel futó .NET 6.0+-ban is írhatók. Az új modellel létrehozott bővítményeket a Visual Studio hibakereső vizualizációinak létrehozása című témakörben találja. Ha támogatnia kell a Visual Studio régebbi verzióit, vagy egy kódtár DLL-jének részeként szeretné szállítani az egyéni vizualizációkat, használja a cikkben található információkat, amelyek csak a bővítményfejlesztés régebbi modelljére (VSSDK) vonatkoznak.

A vizualizáció a Visual Studio hibakereső felhasználói felületének része, amely egy változót vagy objektumot az adattípusának megfelelő módon jelenít meg. A bitkép-vizualizációk például egy bitképszerkezetet értelmeznek, és megjelenítik az általa ábrázolt ábrát. Egyes vizualizációk lehetővé teszik az adatok módosítását és megtekintését. A hibakeresőben a vizualizációt egy nagyító ikonja, a VisualizerIcon jelöli. A DataTip, a Hibakereső figyelő ablakában vagy a QuickWatch párbeszédpanelen kiválaszthatja az ikont, majd kiválaszthatja a megfelelő vizualizációt a megfelelő objektumhoz.

A szabványos beépített vizualizációk mellett további vizualizációk is letölthetők a Microsofttól, harmadik felektől és a közösségtől. Saját vizualizációkat is írhat, és telepítheti őket a Visual Studio hibakeresőjében.

Ez a cikk magas szintű áttekintést nyújt a vizualizációk létrehozásáról. Részletes útmutatásért lásd a következő cikkeket:

Megjegyzés:

Az egyéni vizualizációk nem támogatottak az Univerzális Windows Platform (UWP) és a Windows 8.x-alkalmazások esetében.

Áttekintés

Egyéni vizualizációt bármely felügyelt osztály objektumához írhat, kivéve Object és Array.

A hibakereső vizualizációk architektúrája két részből áll:

  • A hibakereső oldal a Visual Studio hibakeresőjén belül fut, és létrehozza és megjeleníti a vizualizáció felhasználói felületét.

    Mivel a Visual Studio a .NET-keretrendszer futtatókörnyezetében fut, ezt az összetevőt a .NET-keretrendszerhez kell írni. Ezért nem lehet megírni a .NET Core-hoz.

  • A hibakeresési oldal a Visual Studio hibakeresési folyamatán belül fut (a hibakeresés). A vizualizálandó adatobjektum (például egy sztringobjektum) a hibakeresési folyamatban létezik. A hibakeresési oldal elküldi az objektumot a hibakereső oldalnak, amely a létrehozott felhasználói felületen jeleníti meg.

    Az összetevő létrehozásához használt futtatókörnyezetnek meg kell egyeznie azzal, amelyben a hibakeresési folyamat futni fog, azaz .NET-keretrendszer vagy .NET Core.

A hibakereső oldal megkapja az adatobjektumot egy olyan objektumszolgáltatótól , amely megvalósítja az interfészt IVisualizerObjectProvider . A hibakeresési oldal elküldi az objektumot az objektumforráson keresztül, amely a következőből VisualizerObjectSourceszármazik: .

Az objektumszolgáltató adatokat is küldhet vissza az objektumforrásnak, így olyan vizualizációt írhat, amely szerkesztheti az adatokat. Felülbírálhatja az objektumszolgáltatót, hogy kommunikáljon a kifejezésértékelővel és az objektum forrásával.

A hibakeresés alatt álló oldal és a hibakereső oldal Stream metódusok segítségével kommunikál egymással, amelyek egy adatobjektumot Stream formátumba szerializálnak, majd a Stream formátumot vissza deszerializálják adatobjektummá.

Általános típushoz csak akkor írhat vizualizációt, ha a típus nyitott típus. Ez a korlátozás megegyezik az attribútum használatakor érvényes DebuggerTypeProxy korlátozással. További információ: A DebuggerTypeProxy attribútum használata.

Az egyéni vizualizációk biztonsági szempontokat is figyelembe vehetnek. Lásd a Visualizer biztonsági szempontjait.

A hibakeresőoldali felhasználói felület létrehozása

Ahhoz, hogy létrehozza a vizualizáló felhasználói felületet a hibakereső oldalon, hozzon létre egy olyan osztályt, amely örököl DialogDebuggerVisualizer, és felülírja a Microsoft.VisualStudio.DebuggerVisualizers.DialogDebuggerVisualizer.Show metódust a felület megjelenítéséhez. Windows-űrlapokat IDialogVisualizerService , párbeszédpaneleket és vezérlőket jeleníthet meg a vizualizációban.

  1. Metódusok használatával IVisualizerObjectProvider lekérheti a vizualizált objektumot a hibakereső oldalán.

  2. Hozzon létre egy olyan osztályt, amely a forrásból DialogDebuggerVisualizeröröklődik.

Megjegyzés:

Az alábbi szakaszban ismertetett biztonsági problémák miatt a Visual Studio 2022 17.11-es verziójától kezdve a vizualizációk nem fogják tudni megadni a Legacy formázó szabályzatot az alaposztály konstruktorában. Mostantól a vizualizációs eszközök csak JSON szerializálással kommunikálhatnak a hibakereső és a hibaelhárítási oldal összetevők között.

  1. Írja felül a Microsoft.VisualStudio.DebuggerVisualizers.DialogDebuggerVisualizer.Show metódust az interfész megjelenítéséhez. Metódusok használata IDialogVisualizerService a Windows-űrlapok, párbeszédpanelek és vezérlők felületi megjelenítéséhez.

  2. Alkalmazza a DebuggerVisualizerAttribute-t, és adja hozzá a vizualizációt a megjelenítéshez (DialogDebuggerVisualizer).

Speciális szempontok a hibakereső oldalán a .NET 5.0+-hoz

Az egyéni vizualizációk alapértelmezés szerint bináris szerializálással továbbítják az adatokat a hibakereső és a hibakereső oldal között az BinaryFormatter osztály használatával. Az ilyen szerializálás azonban a .NET 5-ben és újabb verziókban is korlátozva van, mivel a nem javítható biztonsági résekkel kapcsolatos biztonsági aggályok miatt. Ezenkívül az ASP.NET Core 5 teljesen elavultként lett megjelölve, és a használata a ASP.NET Core Dokumentációban leírtak szerint hibát fog okozni. Ez a szakasz azokat a lépéseket ismerteti, hogy a vizualizáció továbbra is támogatott legyen ebben a forgatókönyvben.

  • Kompatibilitási okokból az előző szakaszban felülírt Show metódus továbbra is szükséges egy IVisualizerObjectProvider. A Visual Studio 2019 16.10-es verziójától kezdve azonban valójában az IVisualizerObjectProvider3 típusú. Ezért alakítsa át az objektumot a objectProvider frissített felületre.

  • Amikor objektumokat, például parancsokat vagy adatokat küld a hibakeresési oldalnak , a IVisualizerObjectProvider2.Serialize metódussal továbbítja azokat egy streamnek, a hibakeresési folyamat futásideje alapján határozza meg a legjobb szerializálási formátumot. Ezután adja át a streamet a IVisualizerObjectProvider2.TransferData metódusnak.

  • Ha a hibakeresés alatti vizualizációs összetevőnek vissza kell adnia valamit a hibakereső oldalára, az a Stream objektumban fog elhelyezkedni, amelyet a TransferData metódus ad vissza. IVisualizerObjectProvider2.GetDeserializableObjectFrom metódussal lekérhet belőle egy IDeserializableObject példányt, amit szükség szerint feldolgozhat, vagy használhatja a DeserializeFromJson, ha olyan típusról van szó, amelyet tud deszerializálni.

Kérem, tekintse meg a .NET 5.0+ verzió speciális hibakeresési oldalának elvárásait, hogy megtudja, milyen további módosításokra van szükség a hibakeresett oldalon, amikor a bináris szerializálás nem támogatott.

Megjegyzés:

Ha további információt szeretne a problémáról, tekintse meg a BinaryFormatter biztonsági útmutatót.

A hibakeresési oldal vizualizációs objektumforrásának létrehozása

A hibakereső oldalkódjában szerkessze a DebuggerVisualizerAttributekódot, és adja meg a vizualizáció típusát (a hibakeresőoldali objektumforrást) (VisualizerObjectSource). A Target tulajdonság beállítja az objektumforrást. Ha kihagyja az objektumforrást, a vizualizáció egy alapértelmezett objektumforrást fog használni.

A hibakeresési oldalkód tartalmazza a vizualizációt kapó objektumforrást. Az adatobjektum felülbírálhatja a következő metódusokat VisualizerObjectSource: . Önálló vizualizáció létrehozásához hibakeresési oldali DLL szükséges.

A hibakeresési oldali kódban:

  • Ahhoz, hogy a vizualizáció szerkessze az adatobjektumokat, az objektumforrásnak örökölnie kell a VisualizerObjectSource-t, és felül kell írnia a TransferData vagy CreateReplacementObject metódusokat.

  • Ha támogatnia kell a többhelyes célzást a vizualizációban, a hibakeresési oldali projektfájlban a következő Target Framework Monikers (TFM-ek) használhatók.

    <TargetFrameworks>net20;netstandard2.0;netcoreapp2.0</TargetFrameworks>
    

    Ezek az egyetlen támogatott TFM-ek.

A .NET 5.0+ speciális hibakeresési oldalának szempontjai

Fontos

További lépésekre lehet szükség ahhoz, hogy a vizualizációk a .NET 5.0-s verzióban induljanak el, mivel az alapértelmezés szerint használt bináris szerializálási metódussal kapcsolatos biztonsági aggályok merültek fel. A folytatás előtt olvassa el ezt a szakaszt .

  • Ha a vizualizáció implementálja a TransferData metódust, használja a legújabb GetDeserializableObject verzióban elérhető újonnan hozzáadott VisualizerObjectSource metódust. A IDeserializableObject visszaadott érték segít meghatározni az objektum szerializálási formátumát (bináris vagy JSON), és deszerializálni a mögöttes objektumot, hogy használható legyen.

  • Ha a hibakeresési oldal a hívás részeként adatokat ad vissza a TransferData, szerializálja a hibakeresőoldali streamre adott választ a Serialize módszerrel.