Mengapa C memerlukan graf panggilan, bukan grep
C tiada kelas atau modul untuk menyusun kod. Struktur tinggal dalam panggilan fungsi, pengepala dan struct, dan nama yang sama boleh muncul dalam ulasan, makro dan literal rentetan. Makro eksport dan anotasi membalut pengisytiharan, lalu alat yang hanya menghurai C tulen tersadung. Bagi ejen, langkah pertama yang selamat ialah graf panggilan.
Maguyva membina graf ini, supaya ejen dapat melihat ke mana sesuatu fungsi sampai dan apa yang sampai kepadanya sebelum mencadangkan perubahan.
Apa yang diekstrak oleh Maguyva daripada C
Maguyva meliputi .c dan .h. Definisi fungsi diekstrak sebagai simbol, dan struct serta union boleh dipilih sebagai definisi jenis dalam carian berstruktur. Arahan #include menjadi hubungan import.
Makro eksport dan keterlihatan (corak seperti FOO_API, DLLEXPORT atau LIBEXPORT) dan makro anotasi keselamatan bebenang (seperti GUARDED_BY dan REQUIRES) ditopengkan sebelum penghuraian, supaya pengisytiharan yang dibalutnya dihuraikan sebagai pengisytiharan biasa. Badan makro seperti fungsi dihuraikan; badan makro seperti objek tidak.
Graf merekodkan panggilan, include, penginstansian melalui literal majmuk, rujukan jenis, bacaan dan tulisan, serta aliran kawalan. Kira-kira 124 panggilan pustaka standard C (printf, malloc, free, memcpy, strlen dan seumpamanya) ditapis daripada hubungan, supaya kod projek lebih menonjol.
Contoh gesaan ejen
- “Siapa yang memanggil
uart_write, secara langsung atau melalui fungsi lain?” (dependency_search arah masuk)
- “Fail mana yang menyertakan
config.h, dan struct mana yang digunakan?” (dependency_search, kemudian find_symbol)
- “Terangkan cara paket bergerak daripada sampukan penerimaan ke penghurai protokol.” (
get_task_context)
Had yang diketahui
- C tiada kelas dan tiada pengecualian, jadi hubungan pewarisan, pelaksanaan antara muka, penggantian, lontaran dan tangkapan ditanda sebagai tidak berkenaan.
.h muncul dalam senarai sambungan C, C++ dan Objective-C, jadi pengepala dalam pepohon kod berbilang bahasa dibahagikan antara profil-profil ini.
- Panggilan kepada fungsi pustaka standard yang ditapis bukan tepi graf. Gunakan
text_pattern_search apabila anda memerlukan setiap malloc atau memcpy.
Langkah seterusnya
Sambungkan repositori dengan panduan permulaan pantas, kemudian semak matriks sokongan di halaman keserasian. Untuk kod C++ dalam pepohon yang sama, baca panduan C++.