MQLplus/lib_debug/lib_debug_function_trace_macros.mqh
super.admin 466f9ca5c5 convert
2025-05-30 16:09:52 +02:00

152 lines
5.3 KiB
MQL5

#ifndef LIB_DBG_DEBUG_FUNCTION_TRACE_MACROS_MQH_INCLUDED
#define LIB_DBG_DEBUG_FUNCTION_TRACE_MACROS_MQH_INCLUDED
#property version "5.10"
/**********************************************************************************
* Copyright (C) 2020 Dominik Egert <info@freie-netze.de>
*
* This file is the debugger main user macros include file.
*
* Lisence applied: GPLv2
* https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Author Dominik Egert / Freie Netze UG.
**********************************************************************************
*
* Version: 5.10
* State: public
*
* File information
* ================
*
*/
//*********************************************************************************************************************************************************/
// BEGIN Debugging macros
//
/////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Selective enable/disable LIB_MQLAPI_TRACER
//
// Force enable by MQLAPI
#ifdef LIB_MQLAPI_TRACE
#ifndef LIB_DEBUG_MQLAPI_ALL_CALLS
#define LIB_DEBUG_MQLAPI_ALL_CALLS
#endif
#endif
#ifdef LIB_DEBUG_MQLAPI_ALL_CALLS
#ifndef LIB_DEBUG_MQLAPI
#define LIB_DEBUG_MQLAPI
#endif
#endif
#ifdef LIB_DEBUG_MQLAPI_TRACE
#ifndef LIB_DEBUG_MQLAPI
#define LIB_DEBUG_MQLAPI
#endif
#endif
#ifdef LIB_DEBUG_MQLAPI
#ifndef LIB_DEBUG
#define LIB_DEBUG
#define LIB_DEBUG_INCLUDE_STUB
#endif
#endif
// By default disable mql api tracing
#ifndef LIB_DEBUG_MQLAPI
#ifndef LIB_MQLAPI_CALL_TRACING_DISABLE
#define LIB_MQLAPI_CALL_TRACING_DISABLE
#endif
#else
#ifndef LIB_MQLAPI_CALL_TRACING_ENABLED
#define LIB_MQLAPI_CALL_TRACING_ENABLED
#endif
#endif
//
/////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Function trace macros
//
// MQL-API function tracer macro
#ifdef LIB_MQLAPI_CALL_TRACING_ENABLED
#ifndef DBG_MSG_MQLFUNC
#define DBG_MSG_MQLFUNC(x, id) dbg_mql_api_call_tracer.trace_call_details(__LINE__, id, __FILE__, __FUNCTION__, #x, DBG_MQLAPI_VERSION).x
#endif
#define DBG_MSG_TRACE_CUSTOM_FUNC(x) dbg_mql_api_call_tracer.trace_call_details(__LINE__, 0, __FILE__, __FUNCTION__, #x).dbg_userapi_trace_func_##x
#else
#ifndef DBG_MSG_MQLFUNC
#define DBG_MSG_MQLFUNC(x, id) x
#endif
#define DBG_MSG_TRACE_CUSTOM_FUNC(x) x
#endif
// Function tracing helpers
#ifdef LIB_MQLAPI_TRACE
#ifdef LIB_DEBUG_INCLUDE_STUB
#define LIB_DEBUG_NO_FUNCTION_TRACING
#endif
#endif
#ifndef LIB_DEBUG_NO_FUNCTION_TRACING
#define DBG_MSG_TRACE_BEGIN static ulong dbg_lib_func_call_count = NULL; LIB_DBG_NAMESPACE(dbg_lib, dbg_trace_begin)(__FILE__, __FUNCTION__, __LINE__, dbg_lib_func_call_count);
#define DBG_MSG_TRACE_RETURN LIB_DBG_NAMESPACE(dbg_lib, dbg_trace_end)(__FILE__, __FUNCTION__, __LINE__, NULL); return
#define DBG_MSG_TRACE_RETURN_VAR(x) LIB_DBG_NAMESPACE(dbg_lib, dbg_trace_end)(__FILE__, __FUNCTION__, __LINE__, LIB_DBG_NAMESPACE(dbg_lib, var_out)(__DBG_STRINGIFY_MACRO((x)), x)); return(x)
#define DBG_MSG_TRACE_RETURN_OBJ(x) LIB_DBG_NAMESPACE(dbg_lib, dbg_trace_end)(__FILE__, __FUNCTION__, __LINE__, LIB_DBG_NAMESPACE(dbg_lib, var_out)(__DBG_STRINGIFY_MACRO((x)), x)); return(x)
#define DBG_MSG_NOTRACE_RETURN return
#define DBG_MSG_NOTRACE_RETURN_VAR(x) return(x)
#define DBG_MSG_NOTRACE_RETURN_OBJ(x) return(x)
#else
#define DBG_MSG_TRACE_BEGIN
#define DBG_MSG_TRACE_RETURN PERF_COUNTER_END return
#define DBG_MSG_TRACE_RETURN_VAR(x) PERF_COUNTER_END return(x)
#define DBG_MSG_TRACE_RETURN_OBJ(x) PERF_COUNTER_END return(x)
#define DBG_MSG_NOTRACE_RETURN PERF_COUNTER_END return
#define DBG_MSG_NOTRACE_RETURN_VAR(x) PERF_COUNTER_END return(x)
#define DBG_MSG_NOTRACE_RETURN_OBJ(x) PERF_COUNTER_END return(x)
#endif
//
/////////////////////////////////////////////////////////////////////////////////////////////////////
//
// END Debugging support
//*********************************************************************************************************************************************************/
#endif // LIB_DBG_DEBUG_FUNCTION_TRACE_MACROS_MQH_INCLUDED