Skip to content
Snippets Groups Projects
  • George Joseph's avatar
    7440fd03
    Scope Trace: Add some new tracing macros and an ast_str helper · 7440fd03
    George Joseph authored
    Created new SCOPE_ functions that don't depend on RAII_VAR.  Besides
    generating less code, the use of the explicit SCOPE_EXIT macros
    capture the line number where the scope exited.  The RAII_VAR
    versions can't do that.
    
     * SCOPE_ENTER(level, ...): Like SCOPE_TRACE but doesn't use
       RAII_VAR and therefore needs needs one of...
    
     * SCOPE_EXIT(...): Decrements the trace stack counter and optionally
       prints a message.
    
     * SCOPE_EXIT_EXPR(__expr, ...): Decrements the trace stack counter,
       optionally prints a message, then executes the expression.
       SCOPE_EXIT_EXPR(break, "My while got broken\n");
    
     * SCOPE_EXIT_RTN(, ...): Decrements the trace stack counter,
       optionally prints a message, then returns without a value.
       SCOPE_EXIT_RTN("Bye\n");
    
     * SCOPE_EXIT_RTN_VALUE(__return_value, ...): Decrements the trace
       stack counter, optionally prints a message, then returns the value
       specified.
       SCOPE_EXIT_RTN_VALUE(rc, "Returning with RC: %d\n", rc);
    
    Create an ast_str helper ast_str_tmp() that allocates a temporary
    ast_str that can be passed to a function that needs it, then frees
    it.  This makes using the above macros easier.  Example:
    
       SCOPE_ENTER(1, Format Caps 1: %s  Format Caps 2: %s\n",
           ast_str_tmp(32, ast_format_cap_get_names(cap1, &STR_TMP),
           ast_str_tmp(32, ast_format_cap_get_names(cap2, &STR_TMP));
    
    The calls to ast_str_tmp create an ast_str of the specified initial
    length which can be referenced as STR_TMP.  It then calls the
    expression, which must return a char *, ast_strdupa's it, frees
    STR_TMP, then returns the ast_strdupa'd string.  That string is
    freed when the function returns.
    
    Change-Id: I44059b20d55a889aa91440d2f8a590865998be51
    7440fd03
    History
    Scope Trace: Add some new tracing macros and an ast_str helper
    George Joseph authored
    Created new SCOPE_ functions that don't depend on RAII_VAR.  Besides
    generating less code, the use of the explicit SCOPE_EXIT macros
    capture the line number where the scope exited.  The RAII_VAR
    versions can't do that.
    
     * SCOPE_ENTER(level, ...): Like SCOPE_TRACE but doesn't use
       RAII_VAR and therefore needs needs one of...
    
     * SCOPE_EXIT(...): Decrements the trace stack counter and optionally
       prints a message.
    
     * SCOPE_EXIT_EXPR(__expr, ...): Decrements the trace stack counter,
       optionally prints a message, then executes the expression.
       SCOPE_EXIT_EXPR(break, "My while got broken\n");
    
     * SCOPE_EXIT_RTN(, ...): Decrements the trace stack counter,
       optionally prints a message, then returns without a value.
       SCOPE_EXIT_RTN("Bye\n");
    
     * SCOPE_EXIT_RTN_VALUE(__return_value, ...): Decrements the trace
       stack counter, optionally prints a message, then returns the value
       specified.
       SCOPE_EXIT_RTN_VALUE(rc, "Returning with RC: %d\n", rc);
    
    Create an ast_str helper ast_str_tmp() that allocates a temporary
    ast_str that can be passed to a function that needs it, then frees
    it.  This makes using the above macros easier.  Example:
    
       SCOPE_ENTER(1, Format Caps 1: %s  Format Caps 2: %s\n",
           ast_str_tmp(32, ast_format_cap_get_names(cap1, &STR_TMP),
           ast_str_tmp(32, ast_format_cap_get_names(cap2, &STR_TMP));
    
    The calls to ast_str_tmp create an ast_str of the specified initial
    length which can be referenced as STR_TMP.  It then calls the
    expression, which must return a char *, ast_strdupa's it, frees
    STR_TMP, then returns the ast_strdupa'd string.  That string is
    freed when the function returns.
    
    Change-Id: I44059b20d55a889aa91440d2f8a590865998be51