Heim > Backend-Entwicklung > C++ > Wie erstelle ich ein Aufrufdiagramm für C-Code zur Analyse von Ausführungspfaden?

Wie erstelle ich ein Aufrufdiagramm für C-Code zur Analyse von Ausführungspfaden?

Susan Sarandon
Freigeben: 2024-11-16 18:35:03
Original
804 Leute haben es durchsucht

How to Generate a Call Graph for C   Code to Analyze Execution Paths?

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
Nach dem Login kopieren

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    
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage