Heim > Backend-Entwicklung > C++ > Wie kann ich ein Aufrufdiagramm für C-Code erstellen, um Ausführungspfade zu visualisieren?

Wie kann ich ein Aufrufdiagramm für C-Code erstellen, um Ausführungspfade zu visualisieren?

Patricia Arquette
Freigeben: 2024-12-01 01:41:12
Original
302 Leute haben es durchsucht

How can I generate a call graph for C   code to visualize execution paths?

Erzeugen eines Aufrufdiagramms für C-Code zur Visualisierung von Ausführungspfaden

Um ein Aufrufdiagramm für C-Code zu generieren, wollen wir alle Potenziale aufdecken Ausführungspfade, die zu einer bestimmten Zielfunktion führen. Dies kann hilfreich sein, um die manuelle Identifizierung jedes Pfads zu vermeiden, insbesondere wenn mehrere Pfade vorhanden sind.

Im bereitgestellten Beispiel ist die Zielfunktion D. Um dies zu erreichen, können wir die folgenden Schritte verwenden:

static void D() {}
static void Y() { D(); }
static void X() { Y(); }
static void C() { D(); X(); }
static void B() { C(); }
static void S() { D(); }
static void P() { S(); }
static void O() { P(); }
static void N() { O(); }
static void M() { N(); }
static void G() { M(); }
static void A() { B(); G(); }

int main() {
  A();
}
Nach dem Login kopieren

Sobald wir unseren Code haben, können wir das Anrufdiagramm mit den folgenden Befehlen generieren:

$ clang++ -S -emit-llvm main1.cpp -o - | opt -analyze -dot-callgraph
$ dot -Tpng -ocallgraph.png callgraph.dot
Nach dem Login kopieren

Dadurch wird eine visuelle Darstellung des Anrufs erstellt Diagramm.

Um jedoch die tatsächlichen Funktionsnamen und nicht ihre verstümmelten Gegenstücke zu erhalten, können wir das Diagramm mit C-Filter nachbearbeiten:

#include <vector>

struct A { 
  A(int);
  void f(); // not defined, prevents inlining it!
};

int main() {
  std::vector<A> v;
  v.push_back(42);
  v[0].f();
}

$ 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

Dies führt zu einem informativeren Aufrufdiagramm die tatsächlichen Namen der beteiligten Funktionen und Klassen.

Das obige ist der detaillierte Inhalt vonWie kann ich ein Aufrufdiagramm für C-Code erstellen, um Ausführungspfade zu visualisieren?. 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