:: DEVELOPER ZONE
Sur la plupart des systèmes, vous pouvez démarrer mysqld à partir de
gdb pour obtenir plus d'informations si mysqld plante.
Avec quelques anciennes versions de gdb sous Linux vous devez exécuter
run --one-thread si vous voulez être capables de déboguer les threads
de mysqld threads. Dans ce cas, vous ne pouvez n'avoir qu'un thread
actif à la fois. Nous vous recommandons de mettre à jour gdb à la version 5.1
dès que possible vu que le débogage des threads fonctionne mieux avec cette
version !
Lors de l'utilisation de mysqld sous gdb, vous devez désactiver le tra¸age
de la pile avec --skip-stack-trace pour pouvoir trouver les erreurs de
segmentations avec gdb.
Il est très difficile de déboguer MySQL sous gdb si vous effectuez
plusieurs nouvelles connexions tout le temps vu que gdb ne libère pas
la mémoire occupée par les anciens threads. Vous pouvez contourner ce problème
en démarrant mysqld avec -O thread_cache_size= 'max_connections +1'.
Dans la plupart des cas, le simple fait d'utiliser -O thread_cache_size=5'
vous aidera beaucoup !
Si vous voulez obtenir un core dump sur Linux si mysqld se termine avec
un signal SIGSEGV, vous pouvez démarrer mysqld avec l'option --core-file.
Ce fichier noyau peut être utilisé pour effectuer des tra¸ages qui peuvent
vous aider à trouver pourquoi mysqld s'est terminée :
shell> gdb mysqld core gdb> backtrace full gdb> exit
See Section A.4.2, « Que faire si MySQL plante constamment ? ».
Si vous utilisez gdb 4.17.x ou plus récent sous Linux, vous devez installer un
fichier .gdb, avec les informations suivantes, dans votre répertoire
courant :
set print sevenbit off handle SIGUSR1 nostop noprint handle SIGUSR2 nostop noprint handle SIGWAITING nostop noprint handle SIGLWP nostop noprint handle SIGPIPE nostop handle SIGALRM nostop handle SIGHUP nostop handle SIGTERM nostop noprint
Si vous rencontrez des problèmes lors du débogage des threads avec
gdb, vous devez obtenir la version 5.x de gdb et essayer cela à la place.
La nouvelle version de gdb a une meilleur gestion des threads !
Voilà un exemple de comment déboguer mysqld :
shell> gdb /usr/local/libexec/mysqld gdb> run ... backtrace full # A faire lorsque mysqld crashe
Incluez la sortie suivante dans un mail généré
avec mysqlbug et envoyez le sur les listes de diffusion.
See Section 1.7.1.1, « Les listes de diffusion de MySQL ».
Si mysqld ne répond plus, vous pouvez utiliser des outils système tel que
strace ou /usr/proc/bin/pstack pour savoir où mysqld s'est
bloqué.
strace /tmp/log libexec/mysqld
Si vous utilisez l'interface DBI de Perl, vous pouvez activer le
débogage en utilisant la méthode trace ou en définissant la
variable d'environnement DBI_TRACE.
© 1995-2005 MySQL AB. All rights reserved.
