Debuggen von Momentaufnahmen implementieren
Ein übliches Support-Szenario für Berater ist, dass der Kunde ihn mit einem Problem in seiner Lösung kontaktiert, das eine Fehlerbehebung erfordert, um die Ursache sowie die Position des Problems im Code zu ermitteln.
Während es Unterstützung für das Erstellen von Sandboxes mit einer Kopie der Produktionsdaten und das Debuggen/Stoppen des Programmablaufs gibt, ohne den Produktionsmandanten eines Kunden zu beeinträchtigen, wird der Kunde in einigen Fällen blockiert und der Berater steht unter hohem Zeitdruck, um das Problem zu untersuchen und zu lösen – ohne die Zeit zu haben, die erforderlich ist, um eine doppelte Umgebung bereitzustellen und das Problem dort zu reproduzieren.
Microsoft hat die Möglichkeit eingeführt, die AL Debugger für Visual Studio Code an einen Produktionsmandanten anzuhängen, um Momentaufnahmen der Codeausführung zu erstellen. Dadurch wird eine schnelle Untersuchung und Zusammenarbeit mit dem Kunden bei genauen Reproduktionsschritten ermöglicht und so dieses Problem behoben.
Mit der neuen Funktion für Momentaufnahmen können Sie:
Andockpunkte im Code einrichten
Eine neue Konfiguration zum Anhängen von Momentaufnahmen erstellen Dies kann ein Webclient, eine Web-API oder eine Hintergrundsitzung sein (durch Angabe der Benutzer-ID oder Sitzungs-ID, noch keine Benutzeroberfläche für die Auswahl).
An eine Umgebung im Momentaufnahmemodus anhängen
Reproduktionsschritte durchführen, um Andockpunkte auszulösen
Andockpunkt in Visual Studio Code nach Abschluss der Reproduktion herunterladen
Stack-Trace/Programmausführung sowie Variablen an Andockpunkten offline in Visual Studio Code inspizieren
Das Debuggen von Momentaufnahmen ermöglicht es einem delegierten Administrator, AL-Code aufzuzeichnen, der auf dem Server ausgeführt wird, und nach der Ausführung die aufgezeichnete Momentaufnahme in Visual Studio Code zu debuggen. Damit ein delegierter Administrator im Auftrag eines Endbenutzers eine Momentaufnahmedatei erstellen und herunterladen kann, die auf dem Server vorhanden ist, muss der delegierte Administrator Teil der Berechtigungsgruppe D365 Snapshot-Debugger sein.
Einer der Vorteile des Debuggen von Momentaufnahmen besteht darin, dass es die Möglichkeit bietet, die Codeausführung und Variablen in der Produktionsumgebung in einem Clouddienst in einer bestimmten Benutzersitzung zu überprüfen.
Beim Debuggen von Momentaufnahmen wird das Konzept der Andockpunkte eingeführt. Ein Andockpunkt ist ein Haltepunkt in Visual Studio Code, der beim Erstellen einer Momentaufnahme festgelegt wird. Er stoppt jedoch nicht die Ausführung des Codes wie beim regulären Debuggen. Andockpunkte weisen die Ausführung an, den Zustand am Breakpoint für eine spätere Offline-Inspektion zu protokollieren.
Das Debuggen von Momentaufnahmen zeichnet den AL-Code auf, während er auf dem Server ausgeführt wird, sammelt jedoch nur variable Informationen über:
Andockpunkte
AL-Ausnahmen
Sitzung zum Debuggen von Momentaufnahmen initialisieren
Von Visual Studio Code starten Sie eine Momentaufnahme, indem Sie eine Konfigurationsdatei für eine Momentaufnahme erstellen.
Es gibt zwei Vorlagenkonfigurationen für eine Momentaufnahme, auf die durch Auswahl von Konfiguration hinzufügen in Visual Studio Code zugegriffen wird.
AL: Sitzung zum Debuggen von Momentaufnahmen lokal initialisieren
AL: Sitzung zum Debuggen von Momentaufnahmen in der Cloud initialisieren
Wählen Sie aus, ob die Sitzung in einem Clouddienst oder lokal ausgeführt werden soll.
Die Konfigurationsdatei sollte folgende Informationen umfassen:
userId – Die GUID des Benutzers, in dessen Auftrag ein Debuggen von Momentaufnahmen gestartet wird. Bei lokalen Benutzern kann dies auch der Benutzername in Benutzerkennwort-Authentifizierungsszenarien sein. Der Benutzer muss beginnen können oder einen Sitzungstyp geöffnet haben, der im Parameter breakOnNext festgelegt ist.
sessionId – Eine Sitzungs-ID für den oben in „userId“ angegebenen Benutzer.
snapshotVerbosity – Legt fest, wie viel Ausführungskontext aufgezeichnet werden soll. Wenn SnapPoint angegeben ist, werden nur Methoden aufgezeichnet, die einen Andockpunkt treffen.
Wenn eine Konfiguration festgelegt ist, kann eine Sitzung zum Debuggen von Momentaufnahmen durch Drücken von STRG+UMSCHALT+P und der dann folgenden Auswahl von AL:Initialize Snapshot Debugging oder durch Drücken von F7 initialisiert werden.
Der Server wartet nun auf eine Verbindung, um die AL-Ausführung aufzuzeichnen, wobei die folgenden Regeln gelten:
Wenn eine sessionId für eine userId für einen bestimmten Mandanten angegeben ist, wird diese Sitzung mit dem Debuggen von Momentaufnahmen durchgeführt.
Wenn nur eine userId für einen bestimmten Mandanten festgelegt ist, dann wird die nächste Sitzung, die im Konfigurationsparameter breakOnNext festgelegt ist, mit dem Debuggen von Momentaufnahmen durchgeführt.
Wenn keine userId für einen bestimmten Mandanten festgelegt ist, wird die nächste Sitzung, die den Parameter breakOnNext bestätigt, mit dem Debuggen von Momentaufnahmen durchgeführt.
Sobald eine Snapshot-Debugsitzung initialisiert wurde, wird der Sitzungszähler für das Debuggen von Momentaufnahmen in der Statusleiste aktualisiert und sieht folgendermaßen aus:
Status einer Sitzung mit Debuggen von Momentaufnahmen
Das Klicken auf das Statusleistensymbol oder Drücken von UMSCHALT+F7 zeigt eine Liste aller verfügbaren Momentaufnahmen an.
Die Statusliste zeigt den Status einer Sitzung mit debuggten Momentaufnahmen an. Eine Sitzung mit Debuggen von Momentaufnahmen kann einen der folgenden Status haben:
Initialisiert – Es wird eine Anfrage ausgegeben und der Server wartet auf die nächste Sitzung, um ein Debuggen von Momentaufnahmen basierend auf den obigen Regeln durchzuführen.
Gestartet – Sie haben eine Endbenutzersitzung zum Debuggen von Momentaufnahmen angehängt.
Fertig – Wenn die Sitzung mit Debuggen von Momentaufnahmen beendet ist.
Heruntergeladen – Wenn die Momentaufnahmendatei heruntergeladen wird.
Sitzung zum Debuggen von Momentaufnahmen beenden
Sie beenden eine Sitzung mit Debuggen von Momentaufnahmen, indem Sie ALT+F7 drücken. Dadurch werden alle gestarteten Momentaufnahmensitzungen angezeigt. Wenn Sie eine auswählen, wird das Sitzungsdebugging auf dem Server geschlossen und die Momentaufnahmendatei heruntergeladen.
Die Momentaufnahmendatei kann Datenschutzdaten des Kunden enthalten und muss daher Datenschutzkonform behandelt werden sowie sollte gelöscht werden, wenn sie nicht mehr benötigt wird.
Sitzungen mit Debuggen von Momentaufnahmen, die eine Momentaufnahmedatei erzeugt haben, können debuggt werden. Der Speicherort einer Momentaufnahmendatei wird durch den Konfigurationsparameter al.snapshotOutputPath gesteuert. Standardmäßig ist dieser lokal für den aktuellen Arbeitsbereich und heißt ./.snapshots.
Symbole auf den Snapshot-Debugger-Endpunkt herunterladen
Sie benötigen berechtigungsbezogene Einträge, um Symbole auf einen Produktionsserver herunterzuladen:
Ein stellvertretender Administrator sein
Der schreibgeschützte Zugriff auf die Tabelle der veröffentlichten Anwendungen, die in dem Berechtigungssatz D365 ERWEITERUNG MGT hervorgehoben ist, sollte ebenfalls erteilt werden.
Das Debuggen erfordert, dass Symbole auf dem Server mit den Symbolen abgeglichen werden, über die der Benutzer lokal verfügt. Ist dies nicht der Fall und Sie setzen einen Breakpoint in einer bestimmten Zeile in Visual Studio Code, kann sich die Codezeile von der auf dem Server unterscheiden.
Das Herunterladen von Symbolen verwendet die Debug-Konfigurationseinstellungen snapshotInitialize in Visual Studio Code, die eingerichtet wird, wenn Sie entweder AL: Eine Snapshot-Debugsitzung lokal initialisieren oder AL: Eine Snapshot-Debugsitzung in der Cloud initialisieren auswählen.
{
"name": "snapshotInitialize: MyServer",
"type": "al",
"request": "snapshotInitialize",
"environmentType": "OnPrem",
"server": "http://localhost",
"serverInstance": "BC170",
"authentication": "UserPassword",
"breakOnNext": "WebClient"
},
Das Debuggen erfordert, dass Symbole auf dem Server mit den Symbolen abgeglichen werden, über die der Benutzer lokal verfügt. Ist dies nicht der Fall und Sie setzen einen Breakpoint in einer bestimmten Zeile in Visual Studio Code, kann sich die Codezeile von der auf dem Server unterscheiden. Aus diesem Grund müssen Sie Symbole für das Debuggen von Momentaufnahmen von Produktionsservern herunterladen, damit ein in einer Zeile festgelegter Haltepunkt mit dem übereinstimmt, was der Server von dieser Zeile versteht. Dies soll ein Szenario vermeiden, in dem Sie einen Breakpoint in einer DAL-Datei auf Position 12 setzen, aber Position 12 auf dem Server eine leere Position oder eine andere Position ist, wenn die Symbole nicht identisch sind.
Eine Momentaufnahmendatei debuggen
Es gibt zwei Benutzeraktionen, die das Debuggen von Momentaufnahmen starten.
Erstellen einer neuen Konfiguration Debuggen starten und Angeben des Momentaufnahme-Dateinamens in der Konfigurationseinstellung snapshotFileName. Dies ist die einzige Einstellung, die neben Typ, Anforderung und Name benötigt wird.
Klicken auf das Statussymbol oder Drücken von UMSCHALT+F7 und Auswählen einer fertigen Sitzung mit debuggten Momentaufnahmen.
Sobald eine Snapshot-Debugsitzung in Visual Studio Code beginnt, wird die Codeausführung am ersten Andockpunkt angehalten. AL-Ausnahmen werden als Andockpunkt behandelt, mit dem einzigen Unterschied, dass sie nicht durch Benutzeraktionen entfernt werden können. Andere Andockpunkte sind normale Breakpoints, die durch Benutzeraktionen entfernt oder wieder hinzugefügt werden können. Wenn bei den ersten aufgezeichneten Methoden keine Andockpunkte angegeben sind, ist die erste Zeile der Einstiegsbreakpoint.
Der Benutzer kann Breakpoints setzen und die Ausführung an diesem Breakpoint zum Testen fortsetzen, z. B. wenn eine Linie getroffen wird, aber der Andockpunkt die eigentliche Information trägt.
Der AL-Profiler
Mit dem AL Profiler für die AL Language-Erweiterung können Sie ein Leistungsprofil des Codes erfassen, der für eine Momentaufnahme ausgeführt wurde. Durch Verwenden der Editoransicht für die Leistungsprofilerstellung in Visual Studio Code können Sie die für die Ausführung aufgewendete Zeit untersuchen, indem Sie Top-down‑ und Bottom-up-Call-Stack-Ansichten verwenden. Der AL-Profiler arbeitet mit einer Momentaufnahme des ausgeführten Codes.
Sie zunächst müssen eine Momentaufnahme des ausgeführten Codes erfassen, um ein Profiling für Code durchzuführen. Die Momentaufnahme-Konfiguration hat einen Parameter namens executionContext, der die folgenden möglichen Werte hat. Wenn nichts angegeben ist, ist die Konfiguration standardmäßig DebugAndProfile.
Debuggen – Die Momentaufnahme-Sitzung sammelt keine Profilinformationen.
Profil – Die Momentaufnahme-Sitzung sammelt nur Profilinformationen, Andockpunkte werden ignoriert, und das Debuggen funktioniert nicht.
DebugAndProfile – Sowohl das Debugging als auch die Profilerstellung sind als Ergebnis einer Momentaufnahme-Sitzung verfügbar. Noch einmal, dies ist die Standardeinstellung.
Das bedeutet, dass, wenn wir die Momentaufnahme sowohl für Debugging‑ als auch für Profiling-Zwecke verwenden möchten, die Konfiguration für die Momentaufnahme in der Datei launch.json wie folgt aussehen muss:
"configurations": [
{
"name": "snapshotInitialize: Your own server",
"type": "al",
"userId": "555",
"request": "snapshotInitialize",
"environmentType": "OnPrem",
"server": "http://localserver",
"serverInstance": "BC190",
"authentication": "Windows",
"breakOnNext": "WebClient",
"executionContext": "DebugAndProfile"
},
...
Wenn die Momentaufnahme-Datei dann heruntergeladen wird, können Sie eine Profildatei generieren. Dies kann auf zwei Arten geschehen:
Öffnen Sie die Befehlspalette, indem Sie die Tastenkombination STRG+UMSCHALT+P verwenden, und wählen Sie dann den Befehl AL: Profildatei generieren aus. Klicken Sie dann auf eine Momentaufnahme aus dem Dropdownmenü.
Klicken Sie in Visual Studio Code-Explorer mit der rechten Maustaste auf die spezifische Momentaufnahme-Datei, und wählen Sie Profildatei generieren aus.
Sie können die generierte Profildatei im Leistungsprofil-Editor öffnen, um das Diagramm der Methodenaufrufe zu untersuchen. Wenn Sie die Datei direkt auswählen, wird sie in der Draufsicht geöffnet. Sie können auch mit der rechten Maustaste auf eine Profildatei klicken und erhalten dann die folgenden Optionen:
AL Profile-Visualisierer-TopDown-Grafik
AL Profile-Visualisierer-BottomUp-Grafik
Wenn die Profildatei geöffnet wird, sieht sie wie in der folgenden Abbildung aus:
Sie können mit den verschiedenen Ansichtsmodi die im Diagramm angezeigten Daten untersuchen. Sie können entweder mit der rechten Maustaste auf die Profildatei klicken und eine Ansicht auswählen oder die kleine Schaltfläche in der oberen rechten Ecke verwenden, um zwischen den Ansichten zu wechseln. Es gibt zwei verschiedene Ansichtsmodi im Diagramm: top-down und bottom-up.
Beim Sortieren des Batches von oben nach unten sortiert die Grafik die Methoden nach der Aufrufreihenfolge, was bedeutet, dass die untergeordneten Knoten die Methoden sind, die vom übergeordneten Knoten aufgerufen werden. Und beim Sortieren von unten nach oben wird die Grafik als umgekehrter Aufrufstapel sortiert, was bedeutet, dass die untergeordneten Knoten Methoden sind, die den übergeordneten Knoten aufgerufen haben.
Die Spalten Eigene Zeit und Gesamtzeit sind wichtige Indikatoren dafür, wo Zeit im Code aufgewendet wird, um weiter zu untersuchen. Das Eigene Zeit ist die Zeit, die nur in der Methode verbracht wird, ohne Aufrufe aus der Methode. Die Gesamtzeit ist die Menge von Eigene Zeit plus alle Aufrufe aus der Methode. In Bottom-up-Diagrammen sind die Spalten Gesamtzeit und Eigene Zeit sortierbar. Durch Anklicken der Spalten werden diese zunächst aufsteigend sortiert, durch erneutes Klicken werden sie absteigend sortiert.
Trefferzahl ist nur in Top-Down-Diagrammen verfügbar und zeigt, wie oft eine bestimmte Methode aufgerufen wurde. Die aufgewendete Zeit wird aggregiert.
Die Knoten im Diagramm können gefiltert werden. Die Syntax lautet wie folgt:
@column name | <alias> <op> <value> where
<column name> := [function, url, path, selfTime, totalTime, id, objectType, objectName, declaringApplication]
Die für die Spaltennamen verfügbaren Aliase sind:
<alias> := [f, u, p, s, t, id, ot, on, da]
<op> := [numeric operators, boolean operators, string operators]
numeric operators : [:, =, >, <, <=, >=, <>, !=]
: := equal
boolean operators : [:, =, <>, !=]
string operators : [:, =, !=, <>, ~, =]
~ = := <regex>
Codezeilen visualisieren, die in der Snapshot-Erfassung ausgeführt werden
Debuggen von Momentaufnahmen ist eine leistungsstarke Methode zur Fehlerbehebung in Business Central-Cloud-Produktionsumgebungen. Die Erfassungen von Momentaufnahmen sind nicht interaktiv, daher müssen Punkte für Momentaufnahmen im Voraus festgelegt werden, was das Debuggen von Momentaufnahmen in der Regel zu einem iterativen Prozess macht. Der Momentaufnahme-Wiedergabe wurden jetzt visuelle Hinweise hinzugefügt, um die Effizienz bei der Bestimmung zu erhöhen, welcher Code ausgeführt wurde, z. B. bedingte Codepfade, und um gute Kandidaten für das Setzen neuer Punkte für Momentaufnahmen zu finden und so den Variablenstatus für die Codeausführung zu untersuchen. Diese Hinweise werden im linken Bundsteg des Code-Editors als vertikale Linien angezeigt.
Während der Momentaufnahme-Wiedergabe in Visual Studio Code enthält der linke Rand des Code-Editors einen vertikalen visuellen Balken, der anzeigt, welcher Code in der Erfassung der Momentaufnahme ausgeführt wurde.
Die Farbe der Bundstegleiste kann mit dem neuen al.snapshotDebuggerLinesHitDecoration in der settings.json-Datei gesteuert werden.




