## OrcDebug

OrcDebug — Printing and formatting debug information

## Synopsis

    enum                OrcDebugLevel;
    void                (*OrcDebugPrintFunc)                (int level,
                                                             const char *file,
                                                             const char *func,
                                                             int line,
                                                             const char *format,
                                                             va_list varargs);
    #define             ORC_DEBUG_PRINT                     (level, ...)
    #define             ORC_ERROR                           (...)
    #define             ORC_WARNING                         (...)
    #define             ORC_INFO                            (...)
    #define             ORC_DEBUG                           (...)
    #define             ORC_LOG                             (...)
    #define             ORC_FUNCTION
    int                 orc_debug_get_level                 (void);
    void                orc_debug_print                     (int level,
                                                             const char *file,
                                                             const char *func,
                                                             int line,
                                                             const char *format,
                                                             ...);
    void                orc_debug_set_level                 (int level);
    void                orc_debug_set_print_function        (OrcDebugPrintFunc func);

## Description

## Details

### enum OrcDebugLevel

    typedef enum {
      ORC_DEBUG_NONE = 0,
      ORC_DEBUG_ERROR,
      ORC_DEBUG_WARNING,
      ORC_DEBUG_INFO,
      ORC_DEBUG_DEBUG,
      ORC_DEBUG_LOG
    } OrcDebugLevel;

Enumeration describing debug levels in Orc.

`ORC_DEBUG_NONE` | No debugging. Used to disable debugging output.
`ORC_DEBUG_ERROR` | The level for messages indicating that an error has occurred that causes Orc to produce incorrect results. Also used temporarily by developers for testing code.
`ORC_DEBUG_WARNING` | Messages at this level indicate something has occurred that a developer looking into an application problem may want to know.
`ORC_DEBUG_INFO` | Messages at this level provide high-level information about Orc internals.
`ORC_DEBUG_DEBUG` | The default level for logging messages.
`ORC_DEBUG_LOG` | The level for messages that probably don't need to be logged at all.

### OrcDebugPrintFunc ()

    void                (*OrcDebugPrintFunc)                (int level,
                                                             const char *file,
                                                             const char *func,
                                                             int line,
                                                             const char *format,
                                                             va_list varargs);

Typedef describing functions that can be registered using `orc_debug_set_print_function()` so that it is called to print debugging messages.

`level` : | the debug level
`file` : | name of the file where the debug message occurs
`func` : | name of the function where the debug message occurs
`line` : | line in the file where the debug message occurs
`format` : | a printf format
`varargs` : | varargs for the printf format

### ORC_DEBUG_PRINT()

    #define             ORC_DEBUG_PRINT(level, ...)

Macro to call `orc_debug_print()` with the correct values for the name of the source file, line of source file, and function.

`level` : | debug level of message
`...` : | printf-style format and arguments

### ORC_ERROR()

    #define ORC_ERROR(...) ORC_DEBUG_PRINT(ORC_DEBUG_ERROR, __VA_ARGS__)

Macro to call `ORC_DEBUG_PRINT()` with a level of ORC_DEBUG_ERROR.

`...` : | printf-style format and arguments

### ORC_WARNING()

    #define ORC_WARNING(...) ORC_DEBUG_PRINT(ORC_DEBUG_WARNING, __VA_ARGS__)

Macro to call `ORC_DEBUG_PRINT()` with a level of ORC_DEBUG_WARNING.

`...` : | printf-style format and arguments

### ORC_INFO()

    #define ORC_INFO(...) ORC_DEBUG_PRINT(ORC_DEBUG_INFO, __VA_ARGS__)

Macro to call `ORC_DEBUG_PRINT()` with a level of ORC_DEBUG_INFO.

`...` : | printf-style format and arguments

### ORC_DEBUG()

    #define ORC_DEBUG(...) ORC_DEBUG_PRINT(ORC_DEBUG_DEBUG, __VA_ARGS__)

Macro to call `ORC_DEBUG_PRINT()` with a level of ORC_DEBUG_DEBUG.

`...` : | printf-style format and arguments

### ORC_LOG()

    #define ORC_LOG(...) ORC_DEBUG_PRINT(ORC_DEBUG_LOG, __VA_ARGS__)

Macro to call `ORC_DEBUG_PRINT()` with a level of ORC_DEBUG_LOG.

`...` : | printf-style format and arguments

### ORC_FUNCTION

    #define             ORC_FUNCTION

Internal macro that points to __PRETTY_FUNCTION__ or __func__ if the former is not available.

### orc_debug_get_level ()

    int                 orc_debug_get_level                 (void);

Gets the current debug level.

Returns : | the current debug level

### orc_debug_print ()

    void                orc_debug_print                     (int level,
                                                             const char *file,
                                                             const char *func,
                                                             int line,
                                                             const char *format,
                                                             ...);

`level` : |
`file` : |
`func` : |
`line` : |
`format` : |
`...` : |

### orc_debug_set_level ()

    void                orc_debug_set_level                 (int level);

Sets the current debug level.

`level` : | the new debug level

### orc_debug_set_print_function ()

    void                orc_debug_set_print_function        (OrcDebugPrintFunc func);

Sets the function to call when outputting debugging information. A value of NULL for `func` will restore the default handler, which prints debugging information to stderr.

`func` : | the function to call