Qual è un buon modo per trovare definizioni nei file di intestazione quando si utilizza GCC?

StackOverflow https://stackoverflow.com/questions/8874723

  •  28-10-2019
  •  | 
  •  

Domanda

Qualcuno ha un modo consigliato per trovare definizioni nei file di intestazione quando si utilizza GCC? Quando uso MSVC, posso fare clic con il pulsante destro del mouse e selezionare "Vai a Definizione", il che è davvero bello.

Ho usato NetBeans + GCC e ha assistenza al codice tra cui l'iperlinking alla definizione, quindi questa è un'opzione. Tuttavia, vorrei sapere se ci sono altri IDE con quella funzionalità e anche il modo migliore quando non si utilizza un IDE.

È stato utile?

Soluzione

Puoi correre Doxygen Per generare un browser di origine basato su HTML. Ciò non richiede che il codice sia annotato con documentazione in stile doxygen. Funziona per una lingua multipla, incluso C ++, Giava, e Markdown (.md I file vanno su "pagine correlate").

Ecco un modo per configurare e lanciare Doxygen dalla riga di comando (testata su Linux) ...

## basic
echo -e "SOURCE_BROWSER=YES\n EXTRACT_ALL=YES\n RECURSIVE=YES\n" |doxygen -
xdg-open html/index.html

o

## include diagrams and non-public content -- and launch browser immediately
echo -e "HAVE_DOT=YES\n CALL_GRAPH=YES\n CALLER_GRAPH=YES\n SOURCE_BROWSER=YES\n EXTRACT_ALL=YES\n EXTRACT_PRIVATE=YES\n EXTRACT_STATIC=YES\n RECURSIVE=YES\n SEPARATE_MEMBER_PAGES=YES\n GENERATE_LATEX=NO\n EXCLUDE_SYMLINKS=YES" |doxygen - && chromium-browser --new-window html/index.html

C'è un programma di accompagnamento chiamato doxywizard Il che ti consente di sfogliare le molte opzioni di configurazione disponibili per personalizzare l'HTML generato. In alternativa, puoi correre doxygen -g Per creare un file di configurazione iniziale (che include suggerimenti dettagliati).

Raccomando le seguenti opzioni non default per generare un browser di origine:

SOURCE_BROWSER=YES ## display source code
EXTRACT_ALL=YES ## display all items (not just "documented" ones)
RECURSIVE=YES ## include source found in subdirectories
SEPARATE_MEMBER_PAGES=YES ## optional -- each class member has its own page

Una volta che hai la pagina Web principale in alto, puoi navigare nella fonte di interesse (o utilizzare la funzione di ricerca). La fonte è incrociata con collegamenti cliccabili alle dichiarazioni pertinenti.


Ho riscontrato questo problema alcune volte: Doxygen può creare file di file davvero lunghi e la home directory crittografata di Linux ha un Limite di 143 caratteri. Per aggirare questo, potrebbe essere necessario scrivere il html cartella fuori casa.

Una soluzione rapida e sporca è collegare html a una cartella in /tmp o /dev/shm - forse anche chmodle autorizzazioni per una migliore sicurezza dei dati.

Altri suggerimenti

Provare Cscope. Insieme al modulo Emacs xscope puoi dire a emacs a M-x cscope-find-global-definition, che salterà al file in cui è definito un simbolo. Molto maneggevole.

Naturalmente un IDE come Eclipse o KDevelop o Code :: Blocks dovrebbe avere anche una tale funzionalità.

Eclipse CDT è indipendente dalla piattaforma e ha tale funzionalità (più di più). Indicizza tutto include nel tuo progetto (biblioteca + tuo), quindi puoi trovare la definizione di qualsiasi dichiarazione (o, se dovessi dire, qualsiasi dichiarazione). Puoi pensare a Eclipse come di fantasioso editor di testo orientato a C ++ con ulteriori funzionalità per il lancio di Make (nmake.exe o altro) con il tuo makefile. Uso i compilatori Eclipse + MS CL.EXE di WinSDK: funzionano come ciondoli insieme. Eseguo nmake.exe da Eclipse e Eclipse reindirizza Nmake.exe Console in una finestra IDE speciale. Analizza anche l'output del compilatore e mette in evidenza automaticamente le linee offensive. L'unica cosa che bisogna fare è impostare variabili di ambiente per nmake.exe dall'interno di Eclipse.

cscope è uno dei miei strumenti preferiti per comprendere il codice C, ma potrebbe non tradurre bene nel mondo di Windows.

esuberante ctags è uno strumento eccellente per trovare definizioni in dozzine di lingue. I redattori di programmazione più ragionevoli forniscono un po 'di interfaccia per chiamare ctags Per informazioni sulla definizione. (vim, ad esempio, ti consente di utilizzare ^] per trovare una definizione di un simbolo e ^T Per riapprovare lo stack di definizione.) Si crea un database utilizzando ctags -R . e cerca le definizioni usando il tuo editor. (Per esempio, vim -t foo cercherà il foo tag nel ctags database e salta su quel file e riga.)

Il GNU idutils Il pacchetto fornisce alcune belle utilità simili a ctags per trovare usi di simboli in una varietà di lingue. L'integrazione non è buona nella maggior parte degli editori come ctags o cscope Ma potrebbe essere più facile per voi per scrivere strumenti. Si crea il database con mkid . e cercare simboli con gid foo o lid foo o ricerche simili.

Trovo che i tre strumenti forniscano funzionalità abbastanza diverse da usare tutti e tre. ctags fa la caccia attraverso la fonte in vim estremamente veloce, cscope può aiutare a trovare chiamanti e chiacchiere e gid (specialmente gid -s ...) è buono per ottenere solo alcuni suggerimenti su situazioni complesse che gli altri strumenti non hanno semplicemente risolto. (Né ctagscscope capisce incollaggio Bene, ma gid -s mi permettono di approssimare una soluzione da solo.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top