İçeriğe atla
cd /languages
  • Sistem çekirdeği
  • Programlama
  • AST ve sembol desteği

Maguyva'da C: sistem ve gömülü kod için çağrı grafları

Maguyva, C'yi AST, sembol ve graf desteğiyle sunar; böylece yapay zeka ajanları sistem, aygıt yazılımı ve kütüphane kodunda fonksiyonları, struct'ları, include'ları ve çağıranları izleyebilir.

C neden grep’e değil çağrı grafına ihtiyaç duyar

C’de kodu düzenleyen sınıflar veya modüller yoktur. Yapı fonksiyon çağrılarında, başlık dosyalarında ve struct’larda yaşar; aynı ad yorumlarda, makrolarda ve dize sabitlerinde de geçebilir. Dışa aktarma ve anotasyon makroları bildirimleri sarar ve bu, yalnızca saf C ayrıştıran araçları şaşırtır. Bir ajan için güvenli ilk adım çağrı grafıdır.

Maguyva bu grafı oluşturur; böylece ajan bir değişiklik önermeden önce bir fonksiyonun nereye ulaştığını ve ona neyin ulaştığını görür.

Maguyva C’den neleri çıkarır

Maguyva .c ve .h dosyalarını kapsar. Fonksiyon tanımları sembol olarak çıkarılır; struct’lar ve union’lar yapısal aramada tür tanımı olarak seçilebilir. #include yönergeleri içe aktarma ilişkisi olur.

Dışa aktarma ve görünürlük makroları (FOO_API, DLLEXPORT veya LIBEXPORT gibi desenler) ile iş parçacığı güvenliği anotasyon makroları (GUARDED_BY ve REQUIRES gibi) ayrıştırmadan önce maskelenir; böylece sardıkları bildirimler normal bildirimler olarak ayrıştırılır. Fonksiyon benzeri makroların gövdeleri ayrıştırılır; nesne benzeri makroların gövdeleri ayrıştırılmaz.

Graf çağrıları, include’ları, bileşik sabitler yoluyla örneklemeyi, tür referanslarını, okuma ve yazmaları ve denetim akışını kaydeder. Proje kodunun öne çıkması için yaklaşık 124 C standart kütüphane çağrısı (printf, malloc, free, memcpy, strlen ve benzerleri) ilişkilerden filtrelenir.

Örnek ajan istemleri

  • “uart_write fonksiyonunu doğrudan veya başka fonksiyonlar üzerinden kim çağırıyor?” (gelen yönde dependency_search)
  • “Hangi dosyalar config.h dosyasını dahil ediyor ve onun hangi struct’larını kullanıyor?” (dependency_search, ardından find_symbol)
  • “Bir paketin alma kesmesinden protokol ayrıştırıcısına nasıl ilerlediğini açıkla.” (get_task_context)

Bilinen sınırlar

  • C’de sınıflar ve istisnalar yoktur; bu nedenle kalıtım, arayüz uygulaması, geçersiz kılma, fırlatma ve yakalama ilişkileri uygulanamaz olarak işaretlenir.
  • .h, C, C++ ve Objective-C uzantı listelerinde yer alır; bu nedenle çok dilli ağaçlarda başlık dosyaları bu profiller arasında paylaşılır.
  • Filtrelenen standart kütüphane fonksiyonlarına yapılan çağrılar graf kenarı değildir. Her malloc veya memcpy çağrısına ihtiyacınız olduğunda text_pattern_search kullanın.

Sonraki adımlar

Hızlı başlangıç ile bir repo bağlayın, ardından destek matrisi için uyumluluk sayfasına bakın. Aynı ağaçtaki C++ kodu için C++ rehberini okuyun.

En uygun kullanım

  • > Ortak bir fonksiyondaki küçük bir değişikliğin donanım yollarına ulaşabildiği aygıt yazılımı, gömülü sistem ve işletim sistemi ekipleri.
  • > Genel başlık dosyaları, dışa aktarma makroları ve birçok iç derleme birimi olan uzun ömürlü C kütüphaneleri.
  • > Sorunun “bunu kim, hangi başlık dosyaları üzerinden çağırıyor?” olduğu, ajan destekli incelemeler.

Ajan iş akışları

  • > İmzası veya hata işleme biçimi değişmeden önce bir fonksiyonu çağıran herkesi bulmak.
  • > Bir başlık dosyasını dahil eden dosyaları ve kullandıkları struct'ları haritalamak.
  • > Bir isteği bir kesme işleyicisinden veya giriş noktasından ulaştığı fonksiyonlar boyunca izlemek.

Motor ayrıntıları

  • > C desteği `.c` ve `.h` dosyalarını kapsar. Fonksiyon tanımları semboldür, struct'lar ve union'lar tür tanımıdır ve `#include` içe aktarma ilişkisi olur.
  • > Dışa aktarma, görünürlük ve iş parçacığı güvenliği anotasyon makroları ayrıştırmadan önce maskelenir, böylece sarılan bildirimler ayrıştırılır. Fonksiyon benzeri makro gövdeleri ayrıştırılır; nesne benzeri olanlar ayrıştırılmaz.
  • > `printf`, `malloc` ve `memcpy` gibi yaklaşık 124 standart kütüphane çağrısı filtrelenir. Kalıtım, geçersiz kılma ve istisna ilişkileri uygulanamaz olarak işaretlenir.

Yararlı MCP giriş noktaları

  • find_symbol

    Tanıma ve her referansa ihtiyacınız olduğunda bir fonksiyon veya struct adıyla kullanın.

  • dependency_search

    İmzası veya hata işleme biçimi değişmeden önce ortak bir fonksiyonda gelen yönde dolaşım kullanın.

  • get_task_context

    "Bir paketin alma kesmesinden protokol ayrıştırıcısına nasıl ilerlediğini açıkla" gibi istemler için kullanın.