Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
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:
- Útmutató: Vizualizáció írása C nyelven#
- Útmutató: Vizualizáció írása a Visual Basicben
- Vizualizáció telepítése
- A Natvis dokumentációjában tekintse meg a UIVisualizer elemet. Tekintse meg a Natív SQLite Debugger Visualizer-mintát is.
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.
Metódusok használatával IVisualizerObjectProvider lekérheti a vizualizált objektumot a hibakereső oldalán.
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.
Í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.
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
objectProviderfrissített felületre.Amikor objektumokat, például parancsokat vagy adatokat küld a hibakeresési oldalnak , a
IVisualizerObjectProvider2.Serializemetó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 aIVisualizerObjectProvider2.TransferDatametó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.GetDeserializableObjectFrommetó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
TransferDatavagyCreateReplacementObjectmetó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
VisualizerObjectSourcemetó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.