GNU Info

Info Node: (mysql.info)Using gdb on mysqld

(mysql.info)Using gdb on mysqld


Next: Using stack trace Prev: Making trace files Up: Debugging server
Enter node , (file) or (file)node

Debugging mysqld under gdb
--------------------------

On most system you can also start `mysqld' from `gdb' to get more
information if `mysqld' crashes.

With some older `gdb' versions on Linux you must use `run --one-thread'
if you want to be able to debug `mysqld' threads.  In this case you can
only have one thread active at a time.

When running `mysqld' under gdb, you should disable the stack trace
with `--skip-stack-trace' to be able to catch segfaults within gdb.

It's very hard to debug MySQL under `gdb' if you do a lot of new
connections the whole time as `gdb' doesn't free the memory for old
threads.  You can avoid this problem by starting `mysqld' with `-O
thread_cache_size= 'max_connections +1''.  In most cases just using `-O
thread_cache_size=5'' will help a lot!

If you want to get a core dump on Linux if `mysqld' dies with a SIGSEGV
signal, you can start `mysqld' with the `--core-file' option.  This
core file can be used to make a backtrace that may help you find out
why `mysqld' died:

     shell> gdb mysqld core
     gdb>   backtrace full
     gdb>   exit

Note: Crashing.

If you are using gdb 4.17.x or above on Linux, you should install a
`.gdb' file, with the following information, in your current directory:

     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

If you have problems debugging threads with gdb, you should download
gdb 5.x and try this instead. The new gdb version has very improved
thread handling!

Here is an example how to debug mysqld:

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

Include the above output in a mail generated with `mysqlbug' and mail
this to `mysql@lists.mysql.com'.

If `mysqld' hangs you can try to use some system tools like `strace' or
`/usr/proc/bin/pstack' to examine where `mysqld' has hung.

     strace /tmp/log libexec/mysqld

If you are using the Perl `DBI' interface, you can turn on debugging
information by using the `trace' method or by setting the `DBI_TRACE'
environment variable.  Note: Perl `DBI' Class.


automatically generated by info2www version 1.2.2.9