Bakit kailangan ng C ng call graph, hindi grep
Walang class o module ang C para ayusin ang code. Nasa mga function call, header at struct ang structure, at puwedeng lumabas ang parehong pangalan sa mga comment, macro at string literal. Binabalot ng mga export at annotation macro ang mga declaration, kaya natitisod ang mga tool na purong C lang ang kayang i-parse. Para sa isang agent, ang call graph ang ligtas na unang hakbang.
Binubuo ng Maguyva ang graph na ito, para makita ng agent kung saan umaabot ang isang function at kung ano ang umaabot dito bago ito magmungkahi ng pagbabago.
Ano ang kinukuha ng Maguyva mula sa C
Sakop ng Maguyva ang .c at .h. Kinukuha ang mga function definition bilang symbol, at puwedeng piliin ang mga struct at union bilang type definition sa structural search. Nagiging import relationship ang mga #include directive.
Mina-mask bago i-parse ang mga export at visibility macro (mga pattern tulad ng FOO_API, DLLEXPORT o LIBEXPORT) at ang mga thread-safety annotation macro (tulad ng GUARDED_BY at REQUIRES), kaya pina-parse bilang normal na declaration ang mga binabalot nila. Pina-parse ang body ng mga function-like macro; hindi ang body ng mga object-like macro.
Itinatala ng graph ang mga call, include, instantiation gamit ang compound literal, type reference, read at write, at control flow. Mga 124 C standard-library call (printf, malloc, free, memcpy, strlen at mga katulad nito) ang nifi-filter mula sa mga relationship, para lumitaw ang code ng project.
Mga halimbawang agent prompt
- “Sino ang tumatawag sa
uart_write, direkta man o sa pamamagitan ng ibang function?” (dependency_search na incoming)
- “Aling mga file ang nag-i-include ng
config.h, at aling mga struct nito ang ginagamit nila?” (dependency_search, tapos find_symbol)
- “Ipaliwanag kung paano umaabot ang isang packet mula sa receive interrupt papunta sa protocol parser.” (
get_task_context)
Mga kilalang limitasyon
- Walang class o exception ang C, kaya minarkahang hindi applicable ang mga relationship na inheritance, interface implementation, override, throw at catch.
- Lumalabas ang
.h sa mga extension list ng C, C++ at Objective-C, kaya hinahati sa mga profile na ito ang mga header sa mga multi-language na tree.
- Hindi graph edge ang mga call sa mga na-filter na standard-library function. Gamitin ang
text_pattern_search kapag kailangan mo ang bawat malloc o memcpy.
Mga susunod na hakbang
Mag-connect ng repository gamit ang quickstart, tapos tingnan ang support matrix sa compatibility page. Para sa C++ code sa parehong tree, basahin ang gabay sa C++.