Menjana Graf Panggilan untuk Kod C
Untuk mendedahkan kemungkinan laluan pelaksanaan bagi fungsi tertentu, terutamanya apabila pengenalan manual tidak praktikal, ia adalah berguna untuk menjana graf panggilan.
Membuat Graf Panggilan Menggunakan LLVM:
Untuk membina graf panggilan menggunakan LLVM (Mesin Maya Tahap Rendah), ikut langkah berikut:
Kompilkan kod C dengan -emit Pilihan -llvm untuk menjana pemasangan LLVM:
clang++ -S -emit-llvm main.cpp -o -
Analisis pemasangan menggunakan alat opt dengan bendera -analyze:
opt -analyze main.ll
Janakan fail DOT yang mewakili graf panggilan:
opt -analyze -dot-callgraph main.ll
Tukar fail DOT kepada format imej menggunakan Graphviz:
dot -Tpng -o callgraph.png callgraph.dot
Proses ini akan menghasilkan perwakilan visual graf panggilan, menunjukkan semua laluan yang menuju ke fungsi sasaran.
Contoh:
Pertimbangkan kod C berikut:
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(); }
Menggunakan langkah yang digariskan di atas, kita boleh menjana graf panggilan yang mendedahkan semua laluan yang mungkin melaluinya D() boleh dipanggil.
Pertimbangan Tambahan:
Atas ialah kandungan terperinci Bagaimana untuk Menjana Graf Panggilan untuk Kod C Menggunakan LLVM?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!