Miksi C tarvitsee kutsugraafin eikä grepiä
C:ssä ei ole luokkia eikä moduuleja koodin järjestämiseen. Rakenne on funktiokutsuissa, otsakkeissa ja rakenteissa, ja sama nimi voi esiintyä kommenteissa, makroissa ja merkkijonoliteraaleissa. Vienti- ja annotaatiomakrot ympäröivät esittelyjä, mikä kompastuttaa työkalut, jotka osaavat jäsentää vain puhdasta C:tä. Agentille turvallinen ensimmäinen askel on kutsugraafi.
Maguyva rakentaa tämän graafin, jotta agentti näkee, mihin funktio ulottuu ja mikä siihen ulottuu, ennen kuin se ehdottaa muutosta.
Mitä Maguyva poimii C:stä
Maguyva kattaa tiedostot .c ja .h. Funktioiden määrittelyt poimitaan symboleina, ja rakenteet ja unionit voi valita tyyppimäärittelyinä rakenteellisessa haussa. #include-direktiiveistä tulee tuontisuhteita.
Vienti- ja näkyvyysmakrot (mallit kuten FOO_API, DLLEXPORT tai LIBEXPORT) ja säieturvallisuuden annotaatiomakrot (kuten GUARDED_BY ja REQUIRES) peitetään ennen jäsennystä, joten niiden ympäröimät esittelyt jäsennetään edelleen esittelyinä. Funktiomaisten makrojen rungot jäsennetään, oliomaisten makrojen rungot eivät.
Graafi tallentaa kutsut, include-lauseet, yhdysliteraaleilla tehdyn ilmentymien luonnin, tyyppiviittaukset, luvut ja kirjoitukset sekä ohjausvuon. Noin 124 C:n standardikirjaston kutsua (printf, malloc, free, memcpy, strlen ja vastaavat) suodatetaan pois suhteista, jotta projektin koodi erottuu.
Esimerkkikehotteita agenteille
- “Kuka kutsuu funktiota
uart_write suoraan tai muiden funktioiden kautta?” (dependency_search incoming)
- “Mitkä tiedostot sisällyttävät otsakkeen
config.h, ja mitä sen rakenteita ne käyttävät?” (dependency_search, sitten find_symbol)
- “Selitä, miten paketti kulkee vastaanottokeskeytyksestä protokollajäsentimeen.” (
get_task_context)
Tunnetut rajoitukset
- C:ssä ei ole luokkia eikä poikkeuksia, joten periytymisen, rajapintojen toteutuksen, ylikirjoituksen, heittämisen ja kiinniottamisen suhteet on merkitty soveltumattomiksi.
.h on C:n, C++:n ja Objective-C:n tiedostopäätteiden luetteloissa, joten monikielisten puiden otsakkeet jaetaan näiden profiilien kesken.
- Suodatettujen standardikirjaston funktioiden kutsut eivät ole graafin kaaria. Käytä työkalua
text_pattern_search, kun tarvitset jokaisen malloc- tai memcpy-kutsun.
Seuraavat vaiheet
Yhdistä repositorio pikaoppaan avulla ja tarkista sitten tukimatriisi yhteensopivuussivulta. Saman puun C++-koodia varten lue C++-opas.