3#include "elementa/license.inc"
4#include "elementa/checks.inc"
6#ifndef ELEMENTA_BASE_DEBUGGING_H
7#define ELEMENTA_BASE_DEBUGGING_H
145#ifdef ELE_MAKE_PRODUCTION
146 #undef ELE_PRE_TRACED
160#ifdef ELE_MAKE_PRODUCTION
163 #define ELE_PRE_FILELONGNAME std::string{elementa::base::kHiddenPlaceMsg}
166 #define ELE_PRE_FILEBASENAME std::string{elementa::base::kHiddenPlaceMsg}
171 #define ELE_PRE_FILELONGNAME std::string{__FILE__}
174 #define ELE_PRE_FILEBASENAME (std::string{__FILE__}.rfind('/') >= \
175 std::string{__FILE__}.size()-1 ? \
176 std::string{__FILE__} : \
177 std::string{__FILE__}.substr(\
178 std::string{__FILE__}.rfind('/')+1) )
194#define ELE_CODE_PLACE (ELE_PRE_FILEBASENAME + ":" + std::string{__func__} + \
195 ":" + std::to_string(__LINE__) )
199#define ELE_CODE_LONGPLACE (ELE_PRE_FILELONGNAME + ":" +std::string{__func__} +\
200 ":" + std::to_string(__LINE__) )
233 const RTTextWithEnum::Combination & flags = {},
234 const std::string & placepreff =
"Place:",
235 const std::string & timepreff =
"Time:",
236 const std::string & threadpreff =
"Thread:");
257 #define ELE_CODE_TRACE_ON constexpr bool kTraceOn_ = true
261 #define ELE_CODE_TRACE_OFF constexpr bool kTraceOn_ = false
267 #define ELE_CODE_TRACE_IF if (kTraceOn_) {
270 #define ELE_CODE_TRACE_ELSE } else {
273 #define ELE_CODE_TRACE_ENDIF }
279 #define ELE_CODE_TRACE_ON
283 #define ELE_CODE_TRACE_OFF
289 #define ELE_CODE_TRACE_IF if (false) {
292 #define ELE_CODE_TRACE_ELSE } else {
295 #define ELE_CODE_TRACE_ENDIF }
307#define ELE_PRE_TRACE_PREFFIX "--- TR : "
311 #if ELE_PRE_CPPVER == 2017
315 #define ELE_CODE_TRACE(flags,...) {\
316 if constexpr(kTraceOn_)\
318 std::cout << ELE_PRE_TRACE_PREFFIX \
320 elementa::base::runtime_src_place(\
323 "]. " << __VA_ARGS__ << \
329 #define ELE_CODE_TRACEPOINT {\
330 if constexpr(kTraceOn_)\
332 std::cout << ELE_PRE_TRACE_PREFFIX \
333 << "[TRACEPOINT - " << \
334 elementa::base::runtime_src_place(\
343 #define ELE_CODE_TRACENUDE(...) {\
344 if constexpr(kTraceOn_)\
346 std::cout << __VA_ARGS__; \
351 #define ELE_CODE_PAUSE(flags,...) {\
352 if constexpr(kTraceOn_)\
354 std::cout << ELE_PRE_TRACE_PREFFIX \
356 elementa::base::runtime_src_place(\
359 "]. " << __VA_ARGS__ << \
360 ".\n----> Enter a number to " << \
370 #define ELE_CODE_TRACE(flags,...) {\
373 std::cout << ELE_PRE_TRACE_PREFFIX \
375 elementa::base::runtime_src_place(\
378 "]. " << __VA_ARGS__ << \
384 #define ELE_CODE_TRACEPOINT {\
387 std::cout << ELE_PRE_TRACE_PREFFIX \
388 << "[TRACEPOINT - " << \
389 elementa::base::runtime_src_place(\
398 #define ELE_CODE_TRACENUDE(...) {\
399 if constexpr(kTraceOn_)\
401 std::cout << __VA_ARGS__; \
406 #define ELE_CODE_PAUSE(flags,...) {\
409 std::cout << ELE_PRE_TRACE_PREFFIX \
411 elementa::base::runtime_src_place(\
414 "]. " << __VA_ARGS__ << \
415 ".\n----> Enter a number to " << \
426 #define ELE_CODE_TRACE(flags,...) {}
428 #define ELE_CODE_TRACEPOINT {}
430 #define ELE_CODE_TRACENUDE(...) {}
432 #define ELE_CODE_PAUSE(flags,...) {}
437#define ELE_CODE_UNTRACE(flags,...)
440#define ELE_CODE_UNTRACEPOINT
443#define ELE_CODE_UNPAUSE(flags,...)
448#define ELE_CODE_UNTRACE_IF if (false) {
451#define ELE_CODE_UNTRACE_ELSE } else {
454#define ELE_CODE_UNTRACE_ENDIF }
std::string runtime_src_place(const std::string &place, const RTTextWithEnum::Combination &flags={}, const std::string &placepreff="Place:", const std::string &timepreff="Time:", const std::string &threadpreff="Thread:")
Return a string with info about a place, time and thread during execution.
constexpr char kHiddenPlaceMsg[]
Constant text hiding runtime place when the program is in production.
#define ELE_CLASS_ENUM(NameEnumClass,...)
Define an extended enum type.