• MySQL 调试方式之mysqld.trace


    MySQL 调试方式之mysqld.trace

    MySQL 的 debug 版提供了一个专门的 DBUG 包。通过这个 DBUG 包,可获取正在执行操作程序的 Trace 文件。通过控制 DBUG 开关,可以将 MySQL 的任何操作,以及所涉及的调用模块、函数、状态信息记录在 Trace 文件中。

    DBUG包可以通过使用--debug[=debug_options]或-#[debug_options]选项调用程序来使用。如果在没有debug_options值的情况下指定--debug或-#选项,则大多数MySQL程序使用默认值。服务器默认为d:t:i:o,/tmp/mysqld。 大多数客户端程序使用默认的debug选项值d:t:o,/tmp/program_name.trace。

    在 shell 命令行指定调试控制字符串,示例:

    --debug=d:t
    --debug=d:f,main,subr1:F:L:t,20
    --debug=d,input,output,files:n
    --debug=d:t:i:O,\\mysqld.trace

    对于mysqld,也可以通过设置debug系统变量在运行时更改DBUG设置。此变量具有全局值和会话值:

    mysql> SET GLOBAL debug = 'debug_options';
    mysql> SET SESSION debug = 'debug_options';

    debug_options值是一系列冒号分隔的字段,值中的每个字段都由一个强制标志字符组成,前面可选+或-字符,后面可选逗号分隔的修饰符列表

    [+|-]flag[,modifier,modifier,...,modifier]

    下表介绍标志字符。无法识别的标志字符将被自动忽略。

    标识字符 描述
    d 为当前状态启用DBUG_XXX宏的输出。后面可能会有一个关键字列表,该列表仅为具有该关键字的DBUG宏启用输出。关键字的空列表启用所有宏的输出.在MySQL中,要启用的常见调试宏关键字有enter、exit、error、warning、info和loop。如:set debug = 'd,info';   获取代码中DBUG_PRINT("info:" 打印的日志)
    D 每个调试器输出行之后的延迟。论点是延迟,以十分之一秒为单位,取决于机器的能力。例如,D,20指定两秒的延迟。
    f 将调试、跟踪和分析限制在命名函数列表中。空列表启用所有功能。仍然必须给出适当的d或t标志;此标志仅在启用时限制其操作。
    F 标识每行调试或跟踪输出的源文件名。
    i 用每行调试或跟踪输出的PID或线程ID标识进程
    L 标识调试或跟踪输出每行的源文件行号
    n 打印每行调试或跟踪输出的当前函数嵌套深度
    N 对调试输出的每行进行编号
    o 将调试器输出流重定向到指定文件。默认输出为stderr
    O 与o类似,但文件在每次写入之间都会被刷新。需要时,在每次写入之间关闭并重新打开文件
    P 将调试器操作限制为指定进程。一个进程必须用DBUG_进程宏标识,并与列表中的一个进程匹配,才能执行调试器操作
    p 打印每行调试或跟踪输出的当前进程名称
    r 推送新状态时,不要继承以前状态的函数嵌套级别。当输出从左边距开始时有用。
    S 在每个已调试的函数上执行函数_sanity(_file_,_line_))直到_sanity()返回与0不同的内容
    t 启用函数调用/退出跟踪线。后面可能会有一个列表(仅包含一个修饰符),给出数字最大跟踪级别,超过该级别,调试或跟踪宏都不会出现输出。默认为编译时选项。

    前导+或-字符和尾随修饰符列表用于标志字符,如d或f,可以对所有适用修饰符或其中一些修饰符启用调试操作:

    如果没有前导+或-,则标志值将精确设置为给定的修饰符列表。使用前导+或-,列表中的修饰符将添加到当前修饰符列表或从中减去

    以下示例显示了这如何适用于d标志。为所有调试宏启用了空d列表输出。非空列表仅为列表中的宏关键字启用输出。

    这些语句将d值设置为给定的修饰符列表:

    mysql> SET debug = 'd';
    mysql> SELECT @@debug;
    +---------+
    | @@debug |
    +---------+
    | d       |
    +---------+
    mysql> SET debug = 'd,error,warning';
    mysql> SELECT @@debug;
    +-----------------+
    | @@debug         |
    +-----------------+
    | d,error,warning |
    +-----------------+

    前导+或-将当前d值相加或相减:

    mysql> SET debug = '+d,loop';
    mysql> SELECT @@debug;
    +----------------------+
    | @@debug              |
    +----------------------+
    | d,error,warning,loop |
    +----------------------+
    
    mysql> SET debug = '-d,error,loop';
    mysql> SELECT @@debug;
    +-----------+
    | @@debug   |
    +-----------+
    | d,warning |
    +-----------+

    添加到“所有启用的宏”不会导致任何更改:

    mysql> SET debug = 'd';
    mysql> SELECT @@debug;
    +---------+
    | @@debug |
    +---------+
    | d       |
    +---------+
    
    mysql> SET debug = '+d,loop';
    mysql> SELECT @@debug;
    +---------+
    | @@debug |
    +---------+
    | d       |
    +---------+

    禁用所有启用的宏将完全禁用d标志:

    mysql> SET debug = 'd,error,loop';
    mysql> SELECT @@debug;
    +--------------+
    | @@debug      |
    +--------------+
    | d,error,loop |
    +--------------+
    
    mysql> SET debug = '-d,error,loop';
    mysql> SELECT @@debug;
    +---------+
    | @@debug |
    +---------+
    |         |
    +---------+

    建议:

    set debug = 'd:t:o,/tmp/mysqld.trace';   只对当前会话生效,只对当前执行的语句 trace。结果比较清晰

    官方手册:https://dev.mysql.com/doc/refman/8.0/en/debugging-mysql.html

  • 相关阅读:
    设计模式学习笔记之设计原则
    设计模式学习笔记之生成器模式
    设计模式学习笔记之适配器模式、外观模式
    java中的日期类型之间转换
    JS刷新当前页面的几种方法总结
    Java_枚举
    动态规划详解_2
    Java算法-动态规划详解
    Java经典算法题_2
    Java算法
  • 原文地址:https://www.cnblogs.com/jkin/p/16497783.html
Copyright © 2020-2023  润新知