Comment trouver l'appelant et le destinataire de l'appel d'une fonction dans le code C, en vi/vim?
Je veux savoir comment puis-je facilement de la souris (ou peut-être utiliser quelques raccourcis faciles) sur un nom de fonction et de trouver tout son destinataire de l'appel ou de l'open où elle a été définie. La plupart des web des manuels dans le web sont vraiment dur à suivre ou de ne pas arriver à travailler. Dire que j'ai envie de cliquer sur allocuvm
et de voir où elle a été définie?
uint newstk=allocuvm(pgdir, USERTOP-PGSIZE, USERTOP);
Pour le saut à une définition, l'utilisation de ctags. Pour trouver les appelants d'une fonction, utilisez l'option cscope. Google ces deux conditions, vous trouverez beaucoup d'info.
OriginalL'auteur Mona Jalal | 2013-10-19
Vous devez vous connecter pour publier un commentaire.
Pour que, Vim intègre avec les cscope outil; voir
:help cscope
pour plus d'informations.OriginalL'auteur Ingo Karkat
cscope exemple minimal
Ingo mentionné, ici est un exemple.
Aller au répertoire de base de votre projet et de l'exécution:
Cela génère un
cscope.out
fichier qui contient les informations analysées. Génération est assez rapide, même pour de grands projets comme le noyau Linux.Ouvrir vim et de l'exécution:
c
est un mnémonique pourcallers
. Les autrescscope
fourni des requêtes sont également possibles, les mnémoniques sont répertoriés sous:Cela ajoute à la liste des appelants pour la quickfix liste, que vous pouvez ouvrir avec:
Aller à la ligne qui vous intéresse et appuyez sur entrée pour sauter.
Pour trouver les appelants du nom de la fonction actuellement sous le curseur, l'ajouter à votre
.vimrc
:et entrez
:Csc<enter>
lorsque le curseur est au-dessus de la fonction.TODO:
Un mot de conseils: j'aime vim, mais c'est trop compliqué pour moi pour l'installation de ce genre de chose. Si un projet questions assez pour vous, essayez de mettre le projet en travaillant sur des "IDE". Il peut d'agir d'une surcharge, si le projet ne fait pas le suivi de l'IDE fichiers de configuration (qui s'auto-évolution des blobs qui polluent le repo...), mais il en vaut la peine pour moi. Pour le C /C++, mon préféré à ce jour a été KDevelop 4.
<C-r><C-w>
(ctrl-r ctrl-w
) insérer le mot sous le curseur dans vim. Que fait lecs find c my_func
un peu plus facile à utiliser.oui, c'est une autre option. Mais depuis
:cs find c
est beaucoup de caractères, je préfère utiliser une commande avec<cword>
😉OriginalL'auteur Ciro Santilli 新疆改造中心 六四事件 法轮功
vi /. --- /est la fonction de recherche dans la vi, et . permet de répéter la même commande.
vous pouvez également utiliser sed ( stream editor ) si c'est un gros fichier
sed
grep pouvez-vous obtenir les numéros de ligne
lire la page de man
OriginalL'auteur Frank Mancini