History

Initial public commit for Dis VM

arr committed 10 years ago

Commit f95902eNo parent (first commit)40 files · +9358 −0Browse files

Showing the changes to src/vm/debug.cpp (1 of 40 files). Show all

Unified · Split

src/vm/debug.cpp+45−0
@@ -0,0 +1,45 @@
1+//
2+// Dis VM
3+// File: debug.cpp
4+// Author: arr
5+//
6+
7+#include <mutex>
8+#include <array>
9+#include <debug.h>
10+
11+namespace
12+{
13+ std::mutex log_mutex;
14+ disvm::debug::log_callback_t log_callback = nullptr;
15+}
16+
17+std::array<bool, static_cast<std::size_t>(disvm::debug::component_trace_t::last) + 1> disvm::debug::trace_enabled = {};
18+
19+disvm::debug::log_callback_t disvm::debug::set_logging_callback(log_callback_t cb)
20+{
21+ std::lock_guard<std::mutex> lock{ log_mutex };
22+ auto tmp = log_callback;
23+ log_callback = cb;
24+ return tmp;
25+}
26+
27+void disvm::debug::log_msg(const component_trace_t origin, const log_level_t level, const char *msg_fmt, ...)
28+{
29+ if (log_callback == nullptr)
30+ return;
31+
32+ if (!is_component_tracing_enabled(origin))
33+ return;
34+
35+ std::va_list args;
36+ va_start(args, msg_fmt);
37+
38+ {
39+ std::lock_guard<std::mutex> lock{ log_mutex };
40+ if (log_callback != nullptr)
41+ log_callback(origin, level, msg_fmt, args);
42+ }
43+
44+ va_end(args);
45+}