文档首页
MySQL 8.4 参考手册
相关文档 下载此手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  使用堆栈跟踪

7.9.1.5 使用堆栈跟踪

在某些操作系统上,如果 mysqld 意外死亡,错误日志将包含堆栈跟踪。您可以使用此来找出 mysqld 死亡的位置(以及可能的原因)。参见 第 7.4.2 节“错误日志”。要获取堆栈跟踪,您必须不要使用 -fomit-frame-pointer 选项来 gcc 编译 mysqld。参见 第 7.9.1.1 节“编译 MySQL 用于调试”

错误日志中的堆栈跟踪如下所示

mysqld got signal 11;
Attempting backtrace. You can use the following information
to find out where mysqld died. If you see no messages after
this, something went terribly wrong...

stack_bottom = 0x41fd0110 thread_stack 0x40000
mysqld(my_print_stacktrace+0x32)[0x9da402]
mysqld(handle_segfault+0x28a)[0x6648e9]
/lib/libpthread.so.0[0x7f1a5af000f0]
/lib/libc.so.6(strcmp+0x2)[0x7f1a5a10f0f2]
mysqld(_Z21check_change_passwordP3THDPKcS2_Pcj+0x7c)[0x7412cb]
mysqld(_ZN16set_var_password5checkEP3THD+0xd0)[0x688354]
mysqld(_Z17sql_set_variablesP3THDP4ListI12set_var_baseE+0x68)[0x688494]
mysqld(_Z21mysql_execute_commandP3THD+0x41a0)[0x67a170]
mysqld(_Z11mysql_parseP3THDPKcjPS2_+0x282)[0x67f0ad]
mysqld(_Z16dispatch_command19enum_server_commandP3THDPcj+0xbb7[0x67fdf8]
mysqld(_Z10do_commandP3THD+0x24d)[0x6811b6]
mysqld(handle_one_connection+0x11c)[0x66e05e]

如果跟踪的函数名解析失败,跟踪将包含较少的信息

mysqld got signal 11;
Attempting backtrace. You can use the following information
to find out where mysqld died. If you see no messages after
this, something went terribly wrong...

stack_bottom = 0x41fd0110 thread_stack 0x40000
[0x9da402]
[0x6648e9]
[0x7f1a5af000f0]
[0x7f1a5a10f0f2]
[0x7412cb]
[0x688354]
[0x688494]
[0x67a170]
[0x67f0ad]
[0x67fdf8]
[0x6811b6]
[0x66e05e]

较新版本的 glibc 堆栈跟踪函数还会将地址打印为相对于对象的地址。在基于 glibc 的系统(Linux)上,插件内意外退出时的跟踪如下所示

plugin/auth/auth_test_plugin.so(+0x9a6)[0x7ff4d11c29a6]

要将相对地址 (+0x9a6) 转换为文件名和行号,请使用以下命令

$> addr2line -fie auth_test_plugin.so 0x9a6
auth_test_plugin
mysql-trunk/plugin/auth/test_plugin.c:65

addr2line 实用程序是 Linux 上 binutils 包的一部分。

在 Solaris 上,过程类似。Solaris printstack() 已经打印相对地址

plugin/auth/auth_test_plugin.so:0x1510

要进行转换,请使用以下命令

$> gaddr2line -fie auth_test_plugin.so 0x1510
mysql-trunk/plugin/auth/test_plugin.c:88

Windows 已经打印了地址、函数名和行

000007FEF07E10A4 auth_test_plugin.dll!auth_test_plugin()[test_plugin.c:72]