One could replace /call with a sub that then calls. E.g.
[CODE lang="ini" title="Another implementation"]/call RemoteCall "subname param0 param1..."
Sub RemoteCall(string RemoteSubParams)
||| One may need to cache params if needed elsewhere, but you can also use .Arg[] to extract
/declare MacroReturn string local NULL
||| Debug call stack but the value of CurSub is substituted with the subname passed in
CALLINGSUB
CALLINGINDEX
||| Perhaps put a generic debug Entry message in here
PUSHCALL
||| Modify the DEBUG define(s) to use the debug flags as vars rather than hardcoded and replace CurSub with name of calling sub
DEBUGN
/call ${RemoteSubParams}
/varset MacroReturn ${Macro.Return}
DEBUGN...
||| Perhaps put a generic Exit messsage in here
POPCALL
/return ${MacroReturn}[/CODE]
In the remote sub, one still needs to have CALLINGSUB and CALLINGINDEX at the top to make use of DEBUG messages produced therein.
One would need to do a global search/replace for /call with /call RemoteCall, then put quotes around the sub/params.