www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 13406] New: Feature request: trace attribute for automatic

https://issues.dlang.org/show_bug.cgi?id=13406

          Issue ID: 13406
           Summary: Feature request:  trace attribute for automatic
                    tracing, OR  (scope, scopeFn)
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: DMD
          Assignee: nobody puremagic.com
          Reporter: kevin.lamonte gmail.com

There have been several proposals for logging in phobos, but I have not seen a
request for tracing.  By tracing I mean on-the-fly recording of function
entry+args and exit+return, sent to a logging framework of some kind.  Other
languages use aspect-oriented programming (Java) and before/after methods
(lisp) to apply this automatically to all code in a project.

I believe that a  trace function attribute could satisfy this very well. 
Desired behavior:

 trace int foo(string bar) {
   ... blah ...
}

...magically becomes...

int foo(string bar) {
    traceFunctionEnter(__LINE__, __FILE__, __MODULE__, __FUNCTION__,
__PRETTYFUNCTION__, [ bar ]);
    scope(success) {
        traceFunctionExitSuccess(__LINE__, __FILE__, __MODULE__, __FUNCTION__,
__PRETTYFUNCTION__, result);
    }
    scope(failure) {
        traceFunctionExitFailure(__LINE__, __FILE__, __MODULE__, __FUNCTION__,
__PRETTYFUNCTION__, result);
    }

   ... blah ...
}

Add the ability to set traceFunctionEnter / traceFunctionExitFailure /
traceFunctionExitSuccess and a logging framework could automagically plug in
and become a tracing framework too.

If  trace as a feature is too library-specific, this idea could instead be
implemented by something like  (scope, &scopeFn) where scopeFn looks like:

void scopeFn(scopeType, __LINE__, __FILE__, __MODULE__, __FUNCTION__,
__PRETTYFUNCTION__, [ args ])

...where scopeType is an enum value meaning "in", "success", or "failure", and
args contains either the input parameters or the return (value or exception),
respectively.

--
Aug 30 2014