En g�n�ral ViM est utilis� en conjonction avec d'autres outils puissants comme ctags et gdb. ctags est tr�s rapide pour la navigation au milieu de millions de lignes de code � C/C++ � et gdb est pour le d�boguage de code � C/C++ �. Une br�ve introduction � ces deux commandes indispensables sera donn�e dans ce chapitre.
ctags est la commande la plus puissante pour coder en C, C++, Java, Perl, scripts shell Korn/Bourne ou Fortran. Les d�veloppeurs utilisent intensivement ctags pour naviguer au travers de milliers de fonctions � l'int�rieur de programmes C/C++. Voyez `man ctags' sous Unix. Il est tr�s important que vous appreniez comment utiliser ctags pour d�velopper des programmes en C, C++, Java, etc. La navigation est la t�che simple la plus importante lors de d�veloppement en C ou C++. L'utilisation de ctags peut vous aider � rapidement lire le code en sautant de la ligne d'appel � la fonction appell�e, en s'enfon�ant dans les appels de fonctions imbriqu�es, et en remontant de la fonction la plus imbriqu�e jusqu'� la fonction principale. Vous pouvez aller et revenir de fonction en fonction tr�s rapidement.
Sans NAVIGATION vous serez compl�tement perdu ! ctags est comme le COMPAS magn�tique n�cessaire aux programmeurs.
Utilisation de ctags :
ctags *.cpp gvim -t foo_function gvim -t main
� l'int�rieur de l'�diteur ViM, vous pouvez sauter � une fonction en tapant : (double point) tag nom_de_la_fonction comme ci dessous :
:tag fonction_exemple
Si vous voulez sauter dans la fonction � partir de la ligne du fichier contenant le nom de la fonction, placez le curseur juste avant le nom de la fonction et tapez CTRL+] (tapez la touche de contr�le et le crochet gauche simultan�ment).
// code d'exemple switch(id_number) { Case 1: if ( foo_function( 22, "abcef") == 3 ) ^ | | | Placez le curseur ici (juste avant foo_function) et tapez CTRL+] Ceci vous emm�nera � la fonction nomm�e "foo_function". Pour revenir � cette ligne tapez CTRL+t
Puisque ctags ne supporte pas directement le langage Embedded SQL/C (ESQL), le script shell suivant peut �tre utilis� pour cr�er les marques pour esql. ESQL/C est un ensemble de commandes SQL de base de donn�e � l'int�rieur de programmes � C �. Le ESQL/C d'Oracle est appell� Pro*C et Sybase, Informix ont ESQL/C et PostgreSQL a produit � ecpg �.
Sauvez ce fichier sous � sqltags.sh � et tapez chmod a+rx tags_gen.sh.
#!/bin/sh # Programme pour cr�er les ctags pour les fichiers ESQL, C++ et C ESQL_EXTN=pc tag_file1=tags_file.1 tag_file2=tags_file.2 which_tag=ctags rm -f $tag_file1 $tag_file2 tags aa=`ls *.$ESQL_EXTN` #echo $aa for ii in $aa do #echo $ii jj=`echo $ii | cut -d'.' -f1` #echo $jj if [ ! -f $jj.cpp ]; then echo " " echo " " echo "*******************************************************" echo "Les fichiers ESQL *.cpp files n'existent pas..." echo "Vous devez g�n�rer les fichiers *.cpp � partir des *.pc" echo "en utilisant le pr�-compilateur Oracle Pro*C ou Sybase" echo "ou le pr�-compilateur Informix esql/c." echo "Puis relancez cette commande" echo "*******************************************************" echo " " exit fi rm -f tags $which_tag $jj.cpp kk=s/$jj\.cpp/$jj\.pc/g #echo $kk> sed.tmp #sed -f sed.tmp tags>> $tag_file1 #sed -e's/sample\.cpp/sample\.pc/g' tags>> $tag_file1 sed -e $kk tags>> $tag_file1 done # S'occupe des fichiers C++/C - exclut les fichiers ESQL *.cpp rm -f tags $tag_file2 bb=`ls *.cpp *.c` aa=`ls *.$ESQL_EXTN` for mm in $bb do ee=`echo $mm | cut -d'.' -f1` file_type="NOT_ESQL" # Exclut les fichiers ESQL *.cpp et *.c for nn in $aa do dd=`echo $nn | cut -d'.' -f1` if [ "$dd" = "$ee" ]; then file_type="ESQL" break fi done if [ "$file_type" = "ESQL" ]; then continue fi rm -f tags $which_tag $mm cat tags>> $tag_file2 done mv -f $tag_file2 tags cat $tag_file1>> tags rm -f $tag_file1 # Doit sortir le fichier des marqueurs pour fonctionner correctement... sort tags> $tag_file1 mv $tag_file1 tags
Le script shell donn� ci-dessous peut �tre utilis� pour g�n�rer les marques pour une tr�s large vari�t� de programmes �crits en JavaScript, les scripts PHP/FI, Korn, C, Bourne et beaucoup d'autres. C'est un module tr�s g�n�rique.
Sauvez ce fichier sous tags_gen.sh et tapez chmod a+rx tags_gen.sh.
#!/bin/sh tmp_tag=tags_file tmp_tag2=tags_file2 echo " " echo " " echo " " echo " " echo " " echo "G�n�re les marqueurs pour..." while : do echo "Entrer l'extension du fichier pour lequel vous voulez g�n�rer des marqueurs." echo -n "Les extensions de fichiers peuvent �tre sh, js, ksh, etc... : " read ans if [ "$ans" == "" ]; then echo " " echo "Mauvaise entr�e. Essayez encore !" else break fi done rm -f $tmp_tag aa=`ls *.$ans` for ii in $aa do jj=`echo $ii | cut -d'.' -f1` #echo $jj cp $ii $jj.c ctags $jj.c echo "s/$jj.c/$ii/g"> $tmp_tag2 sed -f $tmp_tag2 tags>> $tmp_tag \rm -f tags $jj.c done sort $tmp_tag> tags rm -f $tmp_tag $tmp_tag2
Vous utiliserez gdb extensivement avec Vi. Le d�boguage est l'un des plus importants aspects de la programmation en tant que co�t majeur du d�veloppement et des tests des projets.
Pour d�boguer des programmes C/C++ vous utiliserez l'outil � gdb �. Voyez 'man gdb'. Vous devrez compiler vos programmes avec l'option -g3 comme
gcc -g3 foo.c foo_another.c sample.c
Pour configurer des alias utiles :
Configurez l'alias dans votre ~/.bash_profile
alias gdb='gdb -directory=/home/src -directory=/usr/monnom/src '
Donnera -
gdb foo.cpp
gdb> dir /hom2/another_src
Ceci ajoutera un chemin � la recherche de fichier
gdb> break 'some_class::func<TAB><TAB> Ce qui compl�tera le nom de la fonction en vous �vitant le temps de
frappe... et sortira comme -
gdb> break 'some_class::function_foo_some_where(int aa, float bb)'
Taper la touche TAB deux fois permet le compl�ment de la ligne de commande, sauvant ainsi beaucoup de temps de frappe. C'est l'une des techniques les plus importantes pour l'utilisation de gdb.
Pour obtenir de l'aide en ligne -
gdb> help
Donne l'aide en ligne
gdb> help breakpoints
Donne plus de d�tails sur les points d'ancrage.
Pour placer les points d'ancrage et effectuer du d�boguage
unixprompt> gdb exe_filename
gdb> b main
Ceci mettra un point d'ancrage dans la fonction main()
gdb> b 123
Ceci mettra un point d'ancrage � la ligne 123 du fichier courant
gdb> help breakpoints
Donne plus de d�tails sur les points d'ancrage.
Pour analyser des core dumps :
unixprompt> gdb exe_filename core
gdb> bt
Donne une trace de retour des fonctions et les num�ros de lignes o� le
programme a �chou�
gdb> help backtrace
Donne plus de d�tails sur la trace de retour.
Vous pouvez aussi utiliser une version GUI de gdb appell�e xxgdb.
Outils de perte de m�moire -
Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:16