读书人

Mysql的Debug方式实现

发布时间: 2013-09-13 21:12:00 作者: rapoo

Mysql的Debug模式实现

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

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

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

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



3楼u011156212昨天 17:12
好牛逼呀 ,研究了一个那么牛的问题,给力
Re: topasstem8昨天 17:28
回复u011156212n一起加油!
2楼u011750989昨天 16:58
哈哈,旺仔!
Re: topasstem8昨天 16:59
回复u011750989n呵呵,常来逛哦
1楼zzgang_2008昨天 16:54
加油!旺旺,好好学习,天天向上。^^
Re: topasstem8昨天 16:56
回复zzgang_2008n一定会的,哈哈

读书人网 >Mysql

热点推荐