[Issue 13406] New: Feature request: @trace attribute for automatic tracing, OR @(scope, scopeFn)
    via Digitalmars-d-bugs 
    digitalmars-d-bugs at puremagic.com
       
    Sat Aug 30 14:44:41 PDT 2014
    
    
  
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 at puremagic.com
          Reporter: kevin.lamonte at 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.
--
    
    
More information about the Digitalmars-d-bugs
mailing list