2012-08-14 13 views
7

Sono principalmente un programmatore C e C++ e spesso ho bisogno di comprendere rapidamente la struttura di basi di codice molto grandi (gcc, kernel di Linux). Mi chiedo se ci sono strumenti per aiutare in questo senso. Sono particolarmente interessato a call graph, riferimenti alla struttura dei dati in tutto il progetto, includono grafici delle dipendenze, posizione rapida dei simboli, ecc. Ho conosciuto ctags e cscope ma sto cercando qualcosa con più visualizzazione come un grafo delle chiamate che permetta di localizzare rapidamente la definizione di una funzione, eseguire il root del grafico a una determinata chiamata, invertirla (ovvero localizzare tutte le chiamate a una determinata funzione), ecc.Strumenti di lettura, comprensione e lettura del codice sorgente

+0

RTCM - leggi il manuale del compilatore. La maggior parte dei compilatori fa parte di ciò che vuoi e mi aspetto che i compilatori che usi non facciano eccezione. –

risposta

0

Si prega di provare e utilizzare SourceInsight. È abbastanza utile con il codice di navigazione e comprenderlo. Fornisce la maggior parte delle funzionalità richieste dall'utente.

5

Se si desidera creare grafici di chiamata, è possibile eseguire il rollover con GCC -finstrument-functions.

In sostanza, quando si compila un programma con l'opzione abilitata, GCC chiama le seguenti funzioni ogni volta che il programma di destinazione entra o esce da una funzione:

 void __cyg_profile_func_enter (void *this_fn, 
            void *call_site); 
     void __cyg_profile_func_exit (void *this_fn, 
            void *call_site); 

Quello che dovete fare è definire queste funzioni, e scrivere nella tua logica per produrre il grafo delle chiamate lì.

This extremely thorough tutorial spiega come è possibile produrre un grafico di chiamata utilizzando -finstrument-functions e GraphViz. Tutti gli strumenti coinvolti sono FOSS e gratis.

Naturalmente:

  1. I grafici GraphViz produce sono stand-alone, e non parte di un IDE.
  2. Non sono sicuro che la produzione di un call-graph di Linux (il kernel) sia possibile in questo modo.
0

Si potrebbe provare cflow. Ti dà un graf delle chiamate di funzioni all'interno. Tuttavia non è molto flessibile.

Problemi correlati