GraphViz-Dateiexport für den Delphi-Compiler

Aus RAD Studio
Wechseln zu: Navigation, Suche

Ab RAD Studio 12.0 verfügt der Delphi-Compiler über ein experimentelles Feature, mit dem die Strukturen von Projekten verdeutlicht und zirkuläre Unit-Verweise vermieden werden können. Zirkuläre Unit-Verweise verlangsamen die Compilierung und können in Kombination mit anderen Sprachfeatures Nebenwirkungen auf den Compiler haben. Dieses Feature kann einen uses-Anweisungsgraphen direkt auf Compiler-Ebene (ohne ein separates Analysetool) generieren.

Der Compiler verfügt über die neue Befehlsoption --graphviz, die einen Unit-Abhängigkeitsgraphen in einer .gv-GraphViz-Datei generiert. Diese Datei kann von GraphViz (einem Open-Source-Tool, das unter https://graphviz.org/ erhältlich ist) verarbeitet werden. Es gibt auch eine zweite Option zum Ausschließen von Units (einzeln oder nach Familie) aus dem Graphen:

--graphviz (gibt die Datei <exe-Name>.gv aus)

--graphviz-exclude:<Unit-Liste> (schließt bestimmte Unit-Namen aus der Ausgabe aus)


Bei --graphviz-exclude kann das Unit-Namensmuster den Platzhalter '*' enthalten und mehrere Unit-Namensmuster können in der <Unit-Liste> durch ';' getrennt angegeben werden.

Zum Beispiel: --graphviz-exclude:System.*;VCL.*;FMX.* schließt alle System-, VCL- und FireMonkey-Units aus.

Hinweis: Erforderliche Units, wie System, SysInit und System.Variants, sind immer ausgeschlossen.


Sehen Sie sich als Beispiel eine einfache Anwendung an, die aus einem Hauptformular, einem zweiten Dialogfeld und einem Datenmodul besteht. Diese verweisen in den uses-Anweisungen im Abschnitt "interface" und im Abschnitt "implementation" aufeinander. Sie können mit dem folgenden Befehl in der Befehlszeile erzeugt werden (wobei System-Units ausgeschlossen werden):

dcc32 --graphviz --graphviz-exclude=System.*;Vcl.*;WinApi.* GraphTest.dpr

Es wird die folgende .gv-Datei generiert, in der style=dashed für uses-Anweisungen im implementation-Abschnitt verwendet wird:

digraph GraphTest {
      GraphTest -> { GT_mainform GT_dialog GT_datamodule }
      GT_mainform -> { GT_datamodule GT_dialog }
      GT_datamodule
      GT_dialog -> { GT_datamodule GT_mainform } [arrowhead=open,style=dashed]
}

Damit wird ein Graph wie der folgende erzeugt:

GraphViz.png

Hinweis: Die Generierung der .gv-Datei funktioniert nur in der Befehlszeile oder wenn das externe MSBUILD aus der IDE verwendet wird, nicht aber bei der Build-Erzeugung direkt in der IDE.


Siehe auch