mf
Media Framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
debug.h
Go to the documentation of this file.
1 #ifndef MF_DEBUG_H_
2 #define MF_DEBUG_H_
3 
4 
5 #ifndef NDEBUG
6 
7  #define MF_DEBUG_HEADER(caption, separator) \
8  ::mf::detail::debug_header { caption, separator, __FILE__, __LINE__, __func__ }
9 
10  #define MF_DEBUG_T(tag, ...) \
11  ::mf::detail::debug_print( \
12  tag, \
13  MF_DEBUG_HEADER("", ""), \
14  __VA_ARGS__)
15 
16  #define MF_DEBUG(...) MF_DEBUG_T("", __VA_ARGS__)
17 
18  #define MF_DEBUG_EXPR_T(tag, ...) \
19  ([&](const ::mf::detail::debug_header& header, auto... args) { \
20  ::mf::detail::debug_print(tag, header, args...); \
21  })(MF_DEBUG_HEADER("(" #__VA_ARGS__ ") = ", ", "), __VA_ARGS__)
22 
23  #define MF_DEBUG_EXPR(...) MF_DEBUG_EXPR_T("", __VA_ARGS__)
24 
25  #define MF_DEBUG_BACKTRACE(caption) \
26  ::mf::detail::debug_print_backtrace( \
27  MF_DEBUG_HEADER(caption "\nbacktrace:", ""), \
28  ::mf::detail::debug_get_backtrace())
29 
30 #else
31 
32  #define MF_DEBUG_T(...) ((void)0)
33  #define MF_DEBUG(...) ((void)0)
34  #define MF_DEBUG_EXPR_T(...) ((void)0)
35  #define MF_DEBUG_EXPR(...) ((void)0)
36  #define MF_DEBUG_BACKTRACE() ((void)0)
37 
38 #endif
39 
40 #include <set>
41 #include <string>
42 
43 namespace mf {
44 
45 enum class debug_mode {
46  inactive,
47  cerr,
48  file
49 };
50 
52 
53 void set_no_debug_filter();
54 void set_debug_filter(const std::set<std::string>& tags);
55 
56 void initialize_debug();
57 
58 }
59 
60 #include "debug.tcc"
61 
62 #endif
void set_debug_mode(debug_mode mode)
Definition: debug.cc:138
void set_no_debug_filter()
Definition: debug.cc:142
void initialize_debug()
Definition: debug.cc:153
void set_debug_filter(const std::set< std::string > &tags)
Definition: debug.cc:147
debug_mode
Definition: debug.h:45