Spec-Zone .ru
спецификации, руководства, описания, API

22.4.1.4. Отладка mysqld под gdb

На большинстве систем можно также запустить mysqld с gdb, чтобы получить больше информации, если mysqld отказывает.

С некоторыми более старыми gdb версиями на Linux следует использовать run --one-thread если Вы хотите быть в состоянии отладить потоки mysqld. В этом случае у Вас может только быть один поток, активный за один раз. Лучше обновлять до gdb 5.1, потому что отладка потока работает намного лучше с этой версией!

Потоки NPTL (библиотека нового потока по Linux) могут вызвать проблемы, работая mysqld под gdb. Некоторые признаки:

В этом случае следует установить следующую переменную окружения в оболочке прежде, чем запустить gdb:

LD_ASSUME_KERNEL=2.4.1export LD_ASSUME_KERNEL

Работая mysqld под gdb, следует отключить трассировку стека с --skip-stack-trace быть в состоянии поймать segfaults в пределах gdb.

В MySQL 4.0.14 и выше Вас должен использовать --gdb опция к mysqld. Это устанавливает обработчика прерываний для SIGINT (должен был остановить mysqld с ^C установить контрольные точки) и отключить трассировку стека и базовую обработку файла.

Очень трудно отладить MySQL под gdb, если Вы делаете много новых соединений, все время как gdb не освобождает память для старых потоков. Можно избежать этой проблемы, запускаясь mysqld с thread_cache_size набор к значению, равному max_connections + 1. В большинстве случаев только использование --thread_cache_size=5' помогает много!

Если Вы хотите получить дамп ядра на Linux, если mysqld умирает с сигналом SIGSEGV, можно запустить mysqld с --core-file опция. Этот базовый файл может использоваться, чтобы сделать след, который может помочь Вам узнать, почему mysqld умер:

shell> gdb mysqld coregdb>   backtrace fullgdb>   quit

См. Раздел C.5.4.2, "Что к MySQL Do If Продолжает Отказывать".

Если Вы используете gdb 4.17.x или выше на Linux, следует установить a .gdb файл, со следующей информацией, в Вашем текущем каталоге:

set print sevenbit offhandle SIGUSR1 nostop noprinthandle SIGUSR2 nostop noprinthandle SIGWAITING nostop noprinthandle SIGLWP nostop noprinthandle SIGPIPE nostophandle SIGALRM nostophandle SIGHUP nostophandle SIGTERM nostop noprint

Если у Вас есть проблемные отладочные потоки с gdb, следует загрузить gdb 5.x и попробовать это вместо этого. Новая gdb версия очень улучшила обработку потока!

Вот пример, как отладить mysqld:

shell> gdb /usr/local/libexec/mysqldgdb> run...backtrace full # Do this when mysqld crashes

Включайте предыдущий вывод в отчет об ошибках, который можно зарегистрировать использование инструкций в Разделе 1.7, "Как Сообщить об Ошибках или проблемах".

Если mysqld зависает, можно попытаться использовать некоторые системные инструменты как strace или /usr/proc/bin/pstack исследовать, где mysqld завис.

strace /tmp/log libexec/mysqld

Если Вы используете Perl DBI интерфейс, можно включить отладочную информацию при использовании trace метод или устанавливая DBI_TRACE переменная окружения.