0

0

Mysql的Debug模式实现_MySQL

php中文网

php中文网

发布时间:2016-06-01 13:30:01

|

1443人浏览过

|

来源于php中文网

原创

bitsCN.com

mysql的debug模式实现

 

前一段领导开发了一个内核的模块,测试的过程中,发现导致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  

    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 

换物网站源码
换物网站源码

一个基于ASP.NET+MSSQL实现的网站源码,包含一个网站的后台管理、前面展示、留言等常用功能,简单而功能完整,具有相当的学习意义。 采用面向对象模式开发,暂时没有超级管理员管理后台

下载

 *        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. 

 * 

 */  

# ifdef DBUG_OFF  

#    define DBUG_ENTER(a1)  

#    define DBUG_RETURN(a1) return(a1)  

#    define DBUG_VOID_RETURN return  

#    define DBUG_EXECUTE(keyword,a1)  

#    define DBUG_PRINT(keyword,arglist)  

#    define DBUG_2(keyword,format)      /* Obsolete */  

#    define DBUG_3(keyword,format,a1)       /* Obsolete */  

#    define DBUG_4(keyword,format,a1,a2)    /* Obsolete */  

#    define DBUG_5(keyword,format,a1,a2,a3) /* Obsolete */  

#    define DBUG_PUSH(a1)  

#    define DBUG_POP()  

#    define DBUG_PROCESS(a1)  

#    define DBUG_FILE (stderr)  

#    define DBUG_SETJMP setjmp  

#    define DBUG_LONGJMP longjmp  

#    define DBUG_DUMP(keyword,a1)  

# else  

#    define DBUG_ENTER(a) /  

    auto char *_db_func_; auto char *_db_file_; auto int _db_level_; /  

    auto char **_db_framep_; /  

    _db_enter_ (a,__FILE__,__LINE__,&_db_func_,&_db_file_,&_db_level_, /  

            &_db_framep_)  

#    define DBUG_LEAVE /  

          (_db_return_ (__LINE__, &_db_func_, &_db_file_, &_db_level_))  

#    define DBUG_RETURN(a1) return (DBUG_LEAVE, (a1))  

#    define DBUG_VOID_RETURN {DBUG_LEAVE; return;}  

#    define DBUG_EXECUTE(keyword,a1) /  

          {if (_db_on_) {if (_db_keyword_ (keyword)) { a1 }}}  

#    define DBUG_PRINT(keyword,arglist) /  

          {if (_db_on_) {_db_pargs_(__LINE__,keyword); _db_doprnt_ arglist;}}  

#    define DBUG_2(keyword,format) /  

          DBUG_PRINT(keyword,(format))        /* Obsolete */  

#    define DBUG_3(keyword,format,a1) /  

          DBUG_PRINT(keyword,(format,a1))         /* Obsolete */  

#    define DBUG_4(keyword,format,a1,a2) /  

          DBUG_PRINT(keyword,(format,a1,a2))      /* Obsolete */  

#    define DBUG_5(keyword,format,a1,a2,a3) /  

          DBUG_PRINT(keyword,(format,a1,a2,a3))   /* Obsolete */  

#    define DBUG_PUSH(a1) _db_push_ (a1)  

#    define DBUG_POP() _db_pop_ ()  

#    define DBUG_PROCESS(a1) (_db_process_ = a1)  

#    define DBUG_FILE (_db_fp_)  

#    define DBUG_SETJMP(a1) (_db_setjmp_ (), setjmp (a1))  

#    define DBUG_LONGJMP(a1,a2) (_db_longjmp_ (), longjmp (a1, a2))  

#    define DBUG_DUMP(keyword,a1,a2) _db_dump_(__LINE__,keyword,a1,a2)  

# endif  

 

bitsCN.com

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

705

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

233

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

117

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

22

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

61

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

30

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

669

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

58

2026.02.12

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 11.6万人学习

ASP 教程
ASP 教程

共34课时 | 5.1万人学习

Python 教程
Python 教程

共137课时 | 9.7万人学习

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

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