Erstellen eines Aufrufdiagramms für C-Code
In diesem Artikel werden Techniken zum Erstellen eines Aufrufdiagramms für C-Code untersucht, insbesondere beim Versuch, alle zu identifizieren mögliche Ausführungspfade, die zu einer bestimmten Funktion führen.
Aufruf erstellen Diagramm
Um diesem Bedarf gerecht zu werden, besteht ein Ansatz darin, die LLVM-Optimierungspipeline zu nutzen. Dies kann erreicht werden, indem der Code mit den Flags -S und -emit-llvm kompiliert wird, gefolgt von den Optionen -analyze und -dot-callgraph über das Opt-Tool. Zum Beispiel:
$ clang++ -S -emit-llvm main1.cpp -o - | opt -analyze -dot-callgraph $ dot -Tpng -ocallgraph.png callgraph.dot
Dieser Befehl generiert ein Anrufdiagramm, das die potenziellen Ausführungspfade darstellt und als visuelles Diagramm dargestellt wird.
Anpassen der Anrufdiagrammdarstellung
In manchen Fällen kann es von Vorteil sein, das Anrufdiagramm nachzubearbeiten, um die Lesbarkeit zu verbessern. Eine Methode besteht darin, C-Filter zu verwenden, um entzerrte Funktions- und Klassennamen zu erhalten. Das folgende Beispiel veranschaulicht diesen Prozess:
$ clang++ -S -emit-llvm main1.cpp -o - | opt -analyze -std-link-opts -dot-callgraph $ cat callgraph.dot | c++filt | sed 's,>,\>,g; s,-\>,->,g; s,<,\<,g' | gawk '/external node/{id=} != id' | dot -Tpng -ocallgraph.png
Durch die Anwendung dieses modifizierten Diagramms wird es einfacher, die spezifischen Funktionen und Klassen zu identifizieren, die an jedem Pfad beteiligt sind.
Das obige ist der detaillierte Inhalt vonWie erstelle ich ein Aufrufdiagramm für C-Code zur Analyse von Ausführungspfaden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!