153 lines
5.3 KiB
MQL5
153 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
|