debug.h
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1998, 1999, 2000
  5.  * Sleepycat Software.  All rights reserved.
  6.  *
  7.  * $Id: debug.h,v 11.17 2000/07/07 15:50:36 bostic Exp $
  8.  */
  9. #if defined(__cplusplus)
  10. extern "C" {
  11. #endif
  12. /*
  13.  * When running with #DIAGNOSTIC defined, we smash memory and do memory
  14.  * guarding with a special byte value.
  15.  */
  16. #define CLEAR_BYTE 0xdb
  17. #define GUARD_BYTE 0xdc
  18. /*
  19.  * DB assertions.
  20.  */
  21. #if defined(DIAGNOSTIC) && defined(__STDC__)
  22. #define DB_ASSERT(e) ((e) ? (void)0 : __db_assert(#e, __FILE__, __LINE__))
  23. #else
  24. #define DB_ASSERT(e) ((void)0)
  25. #endif
  26. /*
  27.  * Purify and other run-time tools complain about uninitialized reads/writes
  28.  * of structure fields whose only purpose is padding, as well as when heap
  29.  * memory that was never initialized is written to disk.
  30.  */
  31. #ifdef UMRW
  32. #define UMRW_SET(v) (v) = 0
  33. #else
  34. #define UMRW_SET(v)
  35. #endif
  36. /*
  37.  * Debugging macro to log operations.
  38.  * If DEBUG_WOP is defined, log operations that modify the database.
  39.  * If DEBUG_ROP is defined, log operations that read the database.
  40.  *
  41.  * D dbp
  42.  * T txn
  43.  * O operation (string)
  44.  * K key
  45.  * A data
  46.  * F flags
  47.  */
  48. #define LOG_OP(C, T, O, K, A, F) {
  49. DB_LSN __lsn;
  50. DBT __op;
  51. if (DB_LOGGING((C))) {
  52. memset(&__op, 0, sizeof(__op));
  53. __op.data = O;
  54. __op.size = strlen(O) + 1;
  55. (void)__db_debug_log((C)->dbp->dbenv,
  56.     T, &__lsn, 0, &__op, (C)->dbp->log_fileid, K, A, F);
  57. }
  58. }
  59. #ifdef DEBUG_ROP
  60. #define DEBUG_LREAD(C, T, O, K, A, F) LOG_OP(C, T, O, K, A, F)
  61. #else
  62. #define DEBUG_LREAD(C, T, O, K, A, F)
  63. #endif
  64. #ifdef DEBUG_WOP
  65. #define DEBUG_LWRITE(C, T, O, K, A, F) LOG_OP(C, T, O, K, A, F)
  66. #else
  67. #define DEBUG_LWRITE(C, T, O, K, A, F)
  68. #endif
  69. /*
  70.  * Hook for testing recovery at various places in the create/delete paths.
  71.  */
  72. #if CONFIG_TEST
  73. #define DB_TEST_RECOVERY(dbp, val, ret, name)
  74. do {
  75. int __ret;
  76. PANIC_CHECK((dbp)->dbenv);
  77. if ((dbp)->dbenv->test_copy == (val)) {
  78. /* COPY the FILE */
  79. if (F_ISSET((dbp), DB_OPEN_CALLED) && (dbp)->mpf != NULL) 
  80. (void)(dbp)->sync((dbp), 0);
  81. if ((__ret = __db_testcopy((dbp), (name))) != 0)
  82. (ret) = __db_panic((dbp)->dbenv, __ret);
  83. }
  84. if ((dbp)->dbenv->test_abort == (val)) {
  85. /* ABORT the TXN */
  86. (ret) = EINVAL;
  87. goto db_tr_err;
  88. }
  89. } while (0)
  90. #define DB_TEST_RECOVERY_LABEL db_tr_err:
  91. #else
  92. #define DB_TEST_RECOVERY(dbp, val, ret, name)
  93. #define DB_TEST_RECOVERY_LABEL
  94. #endif
  95. #if defined(__cplusplus)
  96. }
  97. #endif