MySQL 源码中的 ut_a ut_ad
Posted 菁芜·Firmamentfell
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 源码中的 ut_a ut_ad相关的知识,希望对你有一定的参考价值。
在 ut0dbg.h
中,可以看到如下宏
#ifdef UNIV_DEBUG
/** Debug assertion. Does nothing unless UNIV_DEBUG is defined. */
#define ut_ad(EXPR) ut_a(EXPR)
/** Debug statement. Does nothing unless UNIV_DEBUG is defined. */
#define ut_d(EXPR) EXPR
#else
/** Debug assertion. Does nothing unless UNIV_DEBUG is defined. */
#define ut_ad(EXPR)
/** Debug statement. Does nothing unless UNIV_DEBUG is defined. */
#define ut_d(EXPR)
#endif
可见, ut_ad
是在开启 UNIV_DEBUG 下的 ut_a
,ut_d
是开启 UNIV_DEBUG 下才执行 EXPR;当 UNIV_DEBUG 关闭时, EXPR 均不执行。
/** Abort execution if EXPR does not evaluate to nonzero.
@param EXPR assertion expression that should hold */
#define ut_a(EXPR) do { if (UNIV_UNLIKELY(!(ulint)(EXPR))) { ut_dbg_assertion_failed(#EXPR, __FILE__, (ulint)__LINE__); } } while (0)
/* Tell the compiler that cond is unlikely to hold */
#define UNIV_UNLIKELY(cond) UNIV_EXPECT(cond, FALSE)
例子如下,在开启 UNIV_DEBUG 时,会执行 lock_mutex_own()
和 trx_mutex_own()
,并且会在其返回值为 0 时报错。
const trx_t *DeadlockChecker::check_and_resolve(const lock_t *lock,
trx_t *trx) {
ut_ad(lock_mutex_own());
ut_ad(trx_mutex_own(trx));
check_trx_state(trx);
ut_ad(!srv_read_only_mode);
以上是关于MySQL 源码中的 ut_a ut_ad的主要内容,如果未能解决你的问题,请参考以下文章
背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中的元素(代码片
Android 插件化VirtualApp 安装并启动资源中自带的 APK 插件 ( 添加依赖库 | 准备插件 APK | 启动插件引擎 | 拷贝 APK 插件 | 安装插件 | 启动插件 )(代码片
Android 插件化VirtualApp 安装并启动资源中自带的 APK 插件 ( 添加依赖库 | 准备插件 APK | 启动插件引擎 | 拷贝 APK 插件 | 安装插件 | 启动插件 )(代码片
解决报错提示:Loading class `com.mysql.jdbc.Driver‘.The new driver class is ‘com.mysql.cj.jdbc.Driver‘.(代码片