0

0

Mysql的Debug模式实现

php中文网

php中文网

发布时间:2016-06-07 15:09:20

|

2628人浏览过

|

来源于php中文网

原创

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 前一段领导开发了一个内核的模块,测试的过程中,发现导致MYSQL客户端无法连接服务器。 经过查询文档,追根溯源,终于找到了MYSQL实现链接客户端的代码,在源文件sql-common/client.c里的 CLI_MYSQL_

欢迎进入linux社区论坛,与200万技术人员互动交流 >>进入

  前一段领导开发了一个内核的模块,测试的过程中,发现导致MYSQL客户端无法连接服务器。

  经过查询文档,追根溯源,终于找到了MYSQL实现链接客户端的代码,在源文件sql-common/client.c里的 CLI_MYSQL_REAL_CONNECT 函数。

  但是代码很长,一时半会儿肯定看不明白。这个时候发现,发现代码当中有很多这样的代码:

  [cpp]

  DBUG_ENTER("mysql_real_connect");

  说明只要以调试模式启动MYSQL,就可以跟踪代码的执行。

  经过查询文档和测试,只要在 cmake 的时候,增加参数 cmake -WITH_DEBUG=1 就可以了。

  然后启动一个MYSQL客户端程序之前,更改一个环境变量:

  [plain]

  export MYSQL_DEBUG=d:t:O,/tmp/client.trace

  使用编辑器打开 /tmp/client.trace 就会得到这样的Debug信息:

  [cpp]

  | info: Connect socket

  | >vio_socket_connect

  | | >vio_set_blocking

  | |

  | | >vio_io_wait

  | |

  | | >vio_set_blocking

  | |

  |

  | info: No success, close socket, try next address.

  | info: End of connect attempts, sock: 4  status: 1  error: 0

  | error: Got error 0 on connect to 'localhost'

  | >set_mysql_extended_error

  | | enter: error :2003 'Can't connect to MySQL server on '%-.100s' (%d)'

  |

  | error: message: 2003/HY000 (Can't connect to MySQL server on 'localhost' (0))

  后面的数字是行号。从这个文件就可以追踪程序的执行啦!

  好牛逼啊!我们不禁感叹。之余,学习了一下这个调试模式的具体实现:

  在 CMakeList.txt 中,有这么一段代码:

  [plain]

  IF(WITH_DEBUG)

  SET(CMAKE_BUILD_TYPE "Debug" CACHE STRING ${BUILDTYPE_DOCSTRING} FORCE)

  [plain]

  IF(NOT CMAKE_BUILD_TYPE

Sora
Sora

Sora是OpenAI发布的一种文生视频AI大模型,可以根据文本指令创建现实和富有想象力的场景。

下载

  AND NOT CMAKE_GENERATOR MATCHES "Visual Studio"

  AND NOT CMAKE_GENERATOR MATCHES "Xcode")

  # This is the case of no CMAKE_BUILD_TYPE choosen, typical for VS and Xcode

  # or if custom C flags are set. In VS and Xcode for non-Debug configurations

  # DBUG_OFF is already correctly set. Use DBUG_OFF for Makefile based projects

  # without build type too, unless user specifically requests DBUG.

  IF(NOT CMAKE_C_FLAGS MATCHES "-DDBUG_ON")

  ADD_DEFINITIONS(-DDBUG_OFF)

  ENDIF()

  ENDIF()

  如果没有设置 CMAKE_BUILD_TYPE ,那么就会执行下面一段代码。如果这时候也没有设置一个名为-DDBUG_ON的CFLAGS的环境变量的话,就会增加一个CFLAGS:-DDBUG_OFF.

  之后,当编译器编译的时候,根据编译器的参数增加的宏来决定 怎么定义 DBUG_ENTER 之类的函数是空代码,还是实际的报错代码。

  [cpp]

  /*

  *        These macros provide a user interface into functions in the

  *        dbug runtime support library.  They isolate users from changes

  *        in the MACROS and/or runtime support.

  *

  *        The symbols "__LINE__" and "__FILE__" are expanded by the

  *        preprocessor to the current source file line number and file

  *        name respectively.

  *

  *        WARNING ---  Because the DBUG_ENTER macro allocates space on

  *        the user function's stack, it must precede any executable

  *        statements in the user function.

  *

  */

[1] [2] 

Mysql的Debug模式实现

相关专题

更多
Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

2

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

2

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

0

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

29

2025.12.24

yandex外贸入口合集
yandex外贸入口合集

本专题汇总了yandex外贸入口地址,阅读下面的文章了解更多内容。

58

2025.12.24

添加脚注通用方法
添加脚注通用方法

本专题整合了添加脚注方法合集,阅读专题下面的文章了解更多内容。

1

2025.12.24

重启电脑教程汇总
重启电脑教程汇总

本专题整合了重启电脑操作教程,阅读下面的文章了解更多详细教程。

3

2025.12.24

纸张尺寸汇总
纸张尺寸汇总

本专题整合了纸张尺寸相关内容,阅读专题下面的文章了解更多内容。

5

2025.12.24

Java Spring Boot 微服务实战
Java Spring Boot 微服务实战

本专题深入讲解 Java Spring Boot 在微服务架构中的应用,内容涵盖服务注册与发现、REST API开发、配置中心、负载均衡、熔断与限流、日志与监控。通过实际项目案例(如电商订单系统),帮助开发者掌握 从单体应用迁移到高可用微服务系统的完整流程与实战能力。

1

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.4万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 771人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号