OLD | NEW |
(Empty) | |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 // Logging and checks. |
| 6 // |
| 7 // Log messages to stdout. LOG() prints normal user messages, VLOG() |
| 8 // is verbose, for tracing and debugging. SetVerbose() enables/disables |
| 9 // VLOG() output. |
| 10 // |
| 11 // LOG() and VLOG() are printf-like, and arguments are checked by gcc. |
| 12 // LOG_IF() and VLOG_IF() call LOG/VLOG if their predicate is true. |
| 13 // CHECK() aborts if its predicate is false. NOTREACHED() always aborts. |
| 14 // Logging is not thread-safe. |
| 15 // |
| 16 |
| 17 #ifndef TOOLS_RELOCATION_PACKER_SRC_DEBUG_H_ |
| 18 #define TOOLS_RELOCATION_PACKER_SRC_DEBUG_H_ |
| 19 |
| 20 #ifdef NDEBUG |
| 21 #undef NDEBUG |
| 22 #include <assert.h> |
| 23 #define NDEBUG |
| 24 #else |
| 25 #include <assert.h> |
| 26 #endif |
| 27 |
| 28 #include <stdarg.h> |
| 29 #include <string.h> |
| 30 |
| 31 namespace relocation_packer { |
| 32 |
| 33 // If gcc, define PRINTF_ATTRIBUTE so that gcc checks Log() as printf-like. |
| 34 #if defined(__GNUC__) && (__GNUC__ >= 3) |
| 35 #define PRINTF_ATTRIBUTE(string_index, first_to_check) \ |
| 36 __attribute__((__format__(__printf__, string_index, first_to_check))) |
| 37 #else |
| 38 #define PRINTF_ATTRIBUTE(string_index, first_to_check) |
| 39 #endif |
| 40 |
| 41 // Logging and checking macros. |
| 42 #define LOG(...) ::relocation_packer::Logger::Log(__VA_ARGS__) |
| 43 #define VLOG(...) ::relocation_packer::Logger::VLog(__VA_ARGS__) |
| 44 #define LOG_IF(cond, ...) \ |
| 45 do { \ |
| 46 if ((cond)) \ |
| 47 LOG(__VA_ARGS__); \ |
| 48 } while (0) |
| 49 #define VLOG_IF(cond, ...) \ |
| 50 do { \ |
| 51 if ((cond)) \ |
| 52 VLOG(__VA_ARGS__); \ |
| 53 } while (0) |
| 54 |
| 55 #define CHECK(expr) assert((expr)) |
| 56 #define NOTREACHED(_) assert(false) |
| 57 |
| 58 class Logger { |
| 59 public: |
| 60 // Log and verbose log to stdout. |
| 61 // |format| is a printf format string. |
| 62 static void Log(const char* format, ...) PRINTF_ATTRIBUTE(1, 2); |
| 63 static void VLog(const char* format, ...) PRINTF_ATTRIBUTE(1, 2); |
| 64 |
| 65 // Set verbose mode. |
| 66 // |flag| is true to enable verbose logging, false to disable it. |
| 67 static void SetVerbose(bool flag); |
| 68 |
| 69 private: |
| 70 Logger() : is_verbose_(false) { } |
| 71 ~Logger() {} |
| 72 |
| 73 // Implementation of log to stdout. |
| 74 // |format| is a printf format string. |
| 75 // |args| is a varargs list of printf arguments. |
| 76 void Log(const char* format, va_list args); |
| 77 |
| 78 // If set, VLOG is enabled, otherwise it is a no-op. |
| 79 bool is_verbose_; |
| 80 |
| 81 // Singleton support. Not thread-safe. |
| 82 static Logger* GetInstance(); |
| 83 static Logger* instance_; |
| 84 }; |
| 85 |
| 86 } // namespace relocation_packer |
| 87 |
| 88 #endif // TOOLS_RELOCATION_PACKER_SRC_DEBUG_H_ |
OLD | NEW |