En cas de crash violent (message Segmentation fault) autoriser la production de fichiers core grâce à :
#Set user limit (accept core files and remove limit of stack size)
$ ulimit -c unlimited
$ ulimit -s unlimited
Affichage des articles dont le libellé est développement. Afficher tous les articles
Affichage des articles dont le libellé est développement. Afficher tous les articles
vendredi 14 septembre 2007
CREER UNE BIBLIOTHEQUE STATIQUE AVEC AR
Les noms des fichiers des logitèques doivent commencer par lib et se terminer par .a. Pour créer la logithèque, il faut compiler chacun de ses composants avec les option -c et -o, comme dans les exemples précédents, puis utiliser le programme ar pour construire la logithèque :
$ ar qvs libprog.a lire.o ecrire.o
Au moment de l'édition des liens du programme prog, il faudra spécifier à la commande gcc l'option -l pour lui indiquer le nom de la logithèque d'où gcc devra puiser les programmes objets référencés par le programme prog. Notez que la commande gcc extensionne automatiquement le nom suivant le paramètre -l en le faisant précéder de lib et le faisant suivre de .a (convertissant prog en libprog.a dans notre cas) :
$ gcc prog.o -lprog -o prog
$ ar qvs libprog.a lire.o ecrire.o
Au moment de l'édition des liens du programme prog, il faudra spécifier à la commande gcc l'option -l pour lui indiquer le nom de la logithèque d'où gcc devra puiser les programmes objets référencés par le programme prog. Notez que la commande gcc extensionne automatiquement le nom suivant le paramètre -l en le faisant précéder de lib et le faisant suivre de .a (convertissant prog en libprog.a dans notre cas) :
$ gcc prog.o -lprog -o prog
COMPILER EN LIGNE DE COMMANDE AVEC GCC
Pour faire la compilation et l'édition des liens du programme prog.c et produire le fichier exécutable prog :
$ gcc -o prog prog.c
Pour compiler un fichier c en fichier objet :
$ gcc -c -o fichier1.o fichier1.c
$ gcc -c -o fichier2.o fichier2.c
Faire l'édition de lien de 2 fichiers objets (dont l'un contient un main) vers un executable 'prog':
$ gcc -o prog fichier1.o fichier2.o
$ gcc -o prog prog.c
Pour compiler un fichier c en fichier objet :
$ gcc -c -o fichier1.o fichier1.c
$ gcc -c -o fichier2.o fichier2.c
Faire l'édition de lien de 2 fichiers objets (dont l'un contient un main) vers un executable 'prog':
$ gcc -o prog fichier1.o fichier2.o
COMPILER UN PROJET QT AVEC QMAKE
1) Se positionner dans le répertoire où se trouvent les sources et lancer
$ qmake -project
qui va générer un fichier nom_repertoire.pro
2) Editer le .pro pour le modifier et lancer
$ qmake
qui va générer le Makefile équivalent
3) Ne jamais éditer le Makefile, toujours repasser par le .pro
4) Si on veut regénérer le Makefile par la suite :
$ make distclean && qmake
5) Par défaut, Qt semble linker avec les librairies de debug, sin on ne le souhaite pas, ajouter une ligne au .pro :
CONFIG += release warn_on qt thread
$ qmake -project
qui va générer un fichier nom_repertoire.pro
2) Editer le .pro pour le modifier et lancer
$ qmake
qui va générer le Makefile équivalent
3) Ne jamais éditer le Makefile, toujours repasser par le .pro
4) Si on veut regénérer le Makefile par la suite :
$ make distclean && qmake
5) Par défaut, Qt semble linker avec les librairies de debug, sin on ne le souhaite pas, ajouter une ligne au .pro :
CONFIG += release warn_on qt thread
VERIFIER UNE SIGNATURE MD5
Générer la signature :
$ md5sum mon_fichier > mon_fichier.md5
Vérifier :
$ md5sum -cv mon_fichier.md5
On peut contrôler un répertoire entier avec le script md5.sh suivant :
#!/bin/sh
# Calculate md5sum of each files or directories in argument
rm -f /tmp/archive.files
rm -f /tmp/archive.md5
find $@ -type f > /tmp/archive.files
for files in `cat /tmp/archive.files`
do
md5sum $files >> /tmp/archive.md5
done
echo "You can get the md5 file at : /tmp/archive.md5"
echo "To check your files, just do a : md5sum -cv /tmp/archive.md5"
$ md5sum mon_fichier > mon_fichier.md5
Vérifier :
$ md5sum -cv mon_fichier.md5
On peut contrôler un répertoire entier avec le script md5.sh suivant :
#!/bin/sh
# Calculate md5sum of each files or directories in argument
rm -f /tmp/archive.files
rm -f /tmp/archive.md5
find $@ -type f > /tmp/archive.files
for files in `cat /tmp/archive.files`
do
md5sum $files >> /tmp/archive.md5
done
echo "You can get the md5 file at : /tmp/archive.md5"
echo "To check your files, just do a : md5sum -cv /tmp/archive.md5"
CONNAÎTRE LES VARIABLES D'ENVIRONNEMENT D'UN PROCESSUS
Il faut utiliser le script ~/showenv.sh PID :
#!/bin/sh
# showenv - show environment of a process, by PID
# If second argument given, show just that one environment variable.
f=/proc/$1/environ
if [ ! -r "$f" ]; then
echo "`basename $0`: can't access process $1" 1>&2
exit 1
fi
case $# in
1) tr '\000' '\012' < $f | sort ;; 2) tr '\000' '\012' < $f | grep "^$2=" ;; *) echo "Usage: `basename $0` pid [envariable-name]" 1>&2; exit 1 ;;
esac
#!/bin/sh
# showenv - show environment of a process, by PID
# If second argument given, show just that one environment variable.
f=/proc/$1/environ
if [ ! -r "$f" ]; then
echo "`basename $0`: can't access process $1" 1>&2
exit 1
fi
case $# in
1) tr '\000' '\012' < $f | sort ;; 2) tr '\000' '\012' < $f | grep "^$2=" ;; *) echo "Usage: `basename $0` pid [envariable-name]" 1>&2; exit 1 ;;
esac
ANALYSER UN FICHIER CORE AVEC GDB
$ gdb fichier_programme fichier_core_généré
(gdb) bt
la commande bt (BackTrace) remontera la pile des appels de fonctions précédent le crash
(gdb) bt
la commande bt (BackTrace) remontera la pile des appels de fonctions précédent le crash
SYNCHRONISATION DE TEMPS GUEST LINUX VMWARE/ HOTE WINDOWS
Il faut modifier le fichier /usr/src/kernel-source-2.6.8/include/asm-i386/param.h des sources du noyau 2.6.8 et le recompiler.
Trouver la définition de la fréquence du timer d'interruption :
#define HZ 1000
Passer sa valeur à 100 :
#define HZ 100
Trouver la définition de la fréquence du timer d'interruption :
#define HZ 1000
Passer sa valeur à 100 :
#define HZ 100
COMPILER UN NOYAU LINUX 2.6
Télécharger le code source du noyau
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.tar.bz2
ou sur debian :
# apt-get install kernel-headers-$(uname -r) kernel-source-$(uname -r)
Décompresser le code source
$ tar xvjf linux-2.6.8.tar.bz2
Nettoyer les anciennes compilations (si besoin)
$ make mrproper
Configurer le noyau
(Cette opération va générer un fichier .config qui contiendra toutes les options paramétrées pour la compilation du nouveau noyau)
$ make menuconfig (ou xconfig ou config)
A noter que si l'on souhaite compiler le noyau avec les mêmes options que son noyau actuel, il suffit de remplacer l'opération précédente par :
$ cp /boot/config- .config
$ make oldconfig # repondre a toute question par entree
Compiler le noyau
$ make bzImage
Compiler les modules
$ make modules
Déplacer le noyau vers /boot
$ cp ./arch/i386/boot/bzImage /boot/vmlinuz-2.6.8-cmp
Déplacer la table de symboles vers /boot
$ cp System.map /boot/System.map-2.6.8-cmp
Installer les modules
$ make modules_install
Créer un fichier "RAM disk" si on n'a pas de disque dur IDE
$ cd /lib/modules/2.6.8
$ mkinitrd -o /boot/initrd-2.6.8-cmp 2.6.8
Configurer GRUB, le chargeur de boot avec le nouveau noyau :
title Debian GNU/Linux, new recompiled kernel
root (hd0,0)
kernel /boot/vmlinuz-2.6.8-cmp root=/dev/hda1 ro
initrd /boot/initrd-2.6.8-cmp
savedefault
boot
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.tar.bz2
ou sur debian :
# apt-get install kernel-headers-$(uname -r) kernel-source-$(uname -r)
Décompresser le code source
$ tar xvjf linux-2.6.8.tar.bz2
Nettoyer les anciennes compilations (si besoin)
$ make mrproper
Configurer le noyau
(Cette opération va générer un fichier .config qui contiendra toutes les options paramétrées pour la compilation du nouveau noyau)
$ make menuconfig (ou xconfig ou config)
A noter que si l'on souhaite compiler le noyau avec les mêmes options que son noyau actuel, il suffit de remplacer l'opération précédente par :
$ cp /boot/config-
$ make oldconfig # repondre a toute question par entree
Compiler le noyau
$ make bzImage
Compiler les modules
$ make modules
Déplacer le noyau vers /boot
$ cp ./arch/i386/boot/bzImage /boot/vmlinuz-2.6.8-cmp
Déplacer la table de symboles vers /boot
$ cp System.map /boot/System.map-2.6.8-cmp
Installer les modules
$ make modules_install
Créer un fichier "RAM disk" si on n'a pas de disque dur IDE
$ cd /lib/modules/2.6.8
$ mkinitrd -o /boot/initrd-2.6.8-cmp 2.6.8
Configurer GRUB, le chargeur de boot avec le nouveau noyau :
title Debian GNU/Linux, new recompiled kernel
root (hd0,0)
kernel /boot/vmlinuz-2.6.8-cmp root=/dev/hda1 ro
initrd /boot/initrd-2.6.8-cmp
savedefault
boot
UTILISER SUBVERSION (SVN)
L'argument d'une révision peut être :
NUMÉRO numéro de la révision
'{' DATE '}' révision disponible à cette date au format {aaaa-mm-jjThh:mm:ss}
'HEAD( dernière révision du dépôt
'BASE' rév. de base de la copie de travail
'COMMITTED' dernière propagation à ou avant BASE
'PREV' révision juste avant COMMITTED
Ajouter un répertoire et son arborescence
-----------------------------------------
svn add mon_rep
svn commit mon_rep -m "Ceci est la description de ce répertoire"
Récupérer une copie de travail SVN
----------------------------------
Se placer à l'endroit de la partition où on souhaite récupérer l'arborescence :
cd ~/svn/dev
récuperer l'arborescence Tracking :
svn co http://rd-cvs/svn/gc/CURRENT/dev/Tracking
Connaître les informations sur une arborescence locale
------------------------------------------------------
svn info
Connaître les révisions et leur auteur sur un fichier donné
-----------------------------------------------------------
svn blame monFichier.cpp > /tmp/monFichier.cpp.svn && kate /tmp/monFichier.cpp.svn
Connaître le status d'un fichier
--------------------------------
svn status mon_fichier
Revenir en arrière les fichiers locaux non commités
---------------------------------------------------
svn revert mon_fichier
Déverrouiller un fichier verrouillé au niveau .svn
--------------------------------------------------
svn cleanup mon_fichier
Trouver les 5 derniers changements effectués sur le repository
-------------------------------------------------------------
svn log -v --limit=5
Comparer un fichier de la copie de travail par rapport au dépot
---------------------------------------------------------------
svn diff mon_fichier
l'option diff-cmd peut être définie dans ~/.subversion/config pour utiliser un outil de diff externe (comme kdiff3)
Déterminer les fichiers modifiés d'une arborescence entre 2 révisions
---------------------------------------------------------------------
svn di -r 74247:74332 --summarize
Revenir à une version précédente des fichiers
---------------------------------------------
svn sw http://rd-cvs/svn/gc/CURRENT/dev/K2/K2 -r 72724
NUMÉRO numéro de la révision
'{' DATE '}' révision disponible à cette date au format {aaaa-mm-jjThh:mm:ss}
'HEAD( dernière révision du dépôt
'BASE' rév. de base de la copie de travail
'COMMITTED' dernière propagation à ou avant BASE
'PREV' révision juste avant COMMITTED
Ajouter un répertoire et son arborescence
-----------------------------------------
svn add mon_rep
svn commit mon_rep -m "Ceci est la description de ce répertoire"
Récupérer une copie de travail SVN
----------------------------------
Se placer à l'endroit de la partition où on souhaite récupérer l'arborescence :
cd ~/svn/dev
récuperer l'arborescence Tracking :
svn co http://rd-cvs/svn/gc/CURRENT/dev/Tracking
Connaître les informations sur une arborescence locale
------------------------------------------------------
svn info
Connaître les révisions et leur auteur sur un fichier donné
-----------------------------------------------------------
svn blame monFichier.cpp > /tmp/monFichier.cpp.svn && kate /tmp/monFichier.cpp.svn
Connaître le status d'un fichier
--------------------------------
svn status mon_fichier
Revenir en arrière les fichiers locaux non commités
---------------------------------------------------
svn revert mon_fichier
Déverrouiller un fichier verrouillé au niveau .svn
--------------------------------------------------
svn cleanup mon_fichier
Trouver les 5 derniers changements effectués sur le repository
-------------------------------------------------------------
svn log -v --limit=5
Comparer un fichier de la copie de travail par rapport au dépot
---------------------------------------------------------------
svn diff mon_fichier
l'option diff-cmd peut être définie dans ~/.subversion/config pour utiliser un outil de diff externe (comme kdiff3)
Déterminer les fichiers modifiés d'une arborescence entre 2 révisions
---------------------------------------------------------------------
svn di -r 74247:74332 --summarize
Revenir à une version précédente des fichiers
---------------------------------------------
svn sw http://rd-cvs/svn/gc/CURRENT/dev/K2/K2 -r 72724
AVOIR DES INFORMATIONS SUR UN BINAIRE
LISTER LES DEPENDANCES DE BIBLIOTHEQUES D'UN BINAIRE
Définir le chemin vers les librairies partagées (shared libraries) chargées dynamiquement s'il y en a
$ export LD_LIBRARY_PATH=./lib/
$ ldd ./bin/gcis
========================================
LISTER LES FONCTIONS ET SYMBOLES D'UNE BIBLIOTHEQUE
$ nm ./libgcis.so
Définir le chemin vers les librairies partagées (shared libraries) chargées dynamiquement s'il y en a
$ export LD_LIBRARY_PATH=./lib/
$ ldd ./bin/gcis
========================================
LISTER LES FONCTIONS ET SYMBOLES D'UNE BIBLIOTHEQUE
$ nm ./libgcis.so
PATCHER UN FICHIER SOURCE
* Créer un patch -- (pour representer l'addition d'un nouveau fichier,
faire un diff avec /dev/null.)
$diff -Naur test.old test.cpp > test.patch
* Appliquer un patch
$patch test.cpp test.patch
* Annuler un patch
$patch -R test.cpp test.patch
faire un diff avec /dev/null.)
$diff -Naur test.old test.cpp > test.patch
* Appliquer un patch
$patch test.cpp test.patch
* Annuler un patch
$patch -R test.cpp test.patch
Inscription à :
Articles (Atom)