Отладка MariaDB с отладчиком
Если у вас MariaDB скомпилирован для отладки, вы можете использовать его в отладчике, таком как ddd или gdb, и получить полные трассировочные файлы выполнения MariaDB. Трассировочные файлы позволяют вам увидеть поток кода и сравнить различия в выполнении, сравнив два трассировочных файла.
Также значительно проще исследовать дампы памяти, если они получены из отладочной бинарной версии.
Обратите внимание, что бинарная версия, скомпилированная для отладки и трассировки, примерно на 10-20% медленнее обычной бинарной версии. Если вы просто компилируете бинарную версию для отладки (опция -g с gcc), разница в скорости по сравнению с обычной бинарной версией незначительна.
Проверка, что MariaDB скомпилирован для отладки
Выполните:
mariadbd --debug --help
Если вы используете MariaDB до версии 10.5, то вам следует использовать mysqld вместо mariadbd!
Если вы получите ошибку unknown option '--debug, значит MariaDB не скомпилирован для отладки и трассировки.
Компиляция MariaDB для отладки начиная с версии 5.5
В Unix необходимо передать -DCMAKE_BUILD_TYPE=Debug в cmake, чтобы скомпилировать с отладочной информацией.
Компиляция MariaDB 5.3 и более ранних версий
Вот как компилировать с отладкой в более старых версиях:
Используйте скрипты в каталоге BUILD, которые будут компилировать MariaDB с наиболее распространёнными отладочными параметрами и плагинами, например:
./BUILD/compile-pentium64-debug-max
Для наиболее распространённых конфигураций в каталоге BUILD существует настроенный скрипт.
Если вы хотите использовать valgrind, очень хорошее средство для интроспекции памяти и проверки переполнений, используйте
./BUILD/compile-pentium64-valgrind-max
Некоторые рекомендуемые скрипты отладки для Intel/AMD:
BUILD/compile-pentium64-debug-max BUILD/compile-pentium64-valgrind-max
Это пример того, как скомпилировать MariaDB для отладки в домашней директории с MariaDB 5.2.9 в качестве примера:
cd ~ mkdir mariadb cd mariadb tar xvf mariadb-5.2.9.tar.gz ln -s mariadb-5.2.9 current cd current ./BUILD/compile-pentium64-debug-max
Последняя команда создаст отладочную версию sql/mysqld.
Отладка MariaDB из каталога исходных кодов
Создание каталога базы данных MariaDB
В следующем примере базы данных MariaDB создаются в /data.
./scripts/mariadb-install-db --srcdir=. --datadir=/data
Запуск MariaDB в отладчике
В данном примере используется ddd, отличный графический отладчик для Linux. Если у вас не установлен ddd, вы можете использовать gdb вместо него.
cd sql ddd ./mariadbd &
В ddd или gdb
run --datadir=/data --language=./share/english --gdb
Вы можете установить параметры в вашем файле /.my.cnf, чтобы не повторять их в строке run.
Если вы запустите mysqld с --debug, вы получите трассировочный файл в /tmp/mysqld.trace, показывающий, что происходит.
Обратите внимание, что в файле конфигурации могут быть разные параметры для каждой версии MariaDB (например, для указания каталога с языковыми файлами).
Отладка сервера MariaDB с помощью mariadb-test-run
Если при запуске mariadb-test-run произойдёт сбой, вы можете отладить его в отладчике, используя один из следующих вариантов:
mariadb-test-run --gdb failing-test-name
или, если вы предпочитаете отладчик ddd:
mariadb-test-run --ddd failing-test-name
Образец файла .my.cnf для облегчения отладки
[client-server] socket=/tmp/mysql-dbug.sock port=3307 [mariadb] datadir=/my/data loose-innodb_file_per_table server_id= 1 log-basename=master loose-debug-mutex-deadlock-detector max-connections=20 lc-messages=en_us [mariadb-10.0] lc-messages-dir=/my/maria-10.0/sql/share [mariadb-10.1] lc-messages-dir=/my/maria-10.1/sql/share [mariadb-10.2] lc-messages-dir=/my/maria-10.2/sql/share [mariadb-10.3] lc-messages-dir=/my/maria-10.3/sql/share
Вышеупомянутый .my.cnf файл:
- Использует явное сокетное соединение для клиента и сервера.
- Предполагает, что исходные коды сервера находятся в /my/maria-xxx. Вы должны изменить это, указав путь к вашим исходным кодам.
- Содержит уникальный фрагмент для каждой версии MariaDB, чтобы не нужно было указывать --lc-messages-dir или --language, даже если вы переключаетесь между отладкой разных версий MariaDB.
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/debugging-mariadb-with-a-debugger/