Edit

kc3-lang/freetype/docs/DEBUG

Branch :

  • Show log

    Commit

  • Author : Werner Lemberg
    Date : 2015-01-17 20:41:43
    Hash : f57fc59e
    Message : Run `src/tools/update-copyright'.

  • docs/DEBUG
  • Debugging within the FreeType sources
    =====================================
    
    I. Configuration macros
    -----------------------
    
    There are  several ways to enable  debugging features in a  FreeType 2
    builds.  This is  controlled through the definition  of special macros
    located in the file `ftoptions.h'.  The macros are:
    
    
      FT_DEBUG_LEVEL_ERROR
    
        #define this macro if you want to compile the FT_ERROR macro calls
        to print error  messages during program execution.   This will not
        stop  the  program.  Very  useful  to  spot invalid  fonts  during
        development and to code workarounds for them.
    
      FT_DEBUG_LEVEL_TRACE
    
        #define this macro if you want to compile both macros FT_ERROR and
        FT_TRACE.  This  also includes the variants  FT_TRACE0, FT_TRACE1,
        FT_TRACE2, ..., FT_TRACE7.
    
        The  trace macros  are used  to  send debugging  messages when  an
        appropriate  `debug level'  is configured  at runtime  through the
        FT2_DEBUG environment variable (more on this later).
    
      FT_DEBUG_MEMORY
    
        If this  macro is #defined, the  FreeType engine is linked  with a
        small  but  effective debugging  memory  manager  that tracks  all
        allocations and frees that are performed within the font engine.
    
        When  the  FT2_DEBUG_MEMORY  environment variable  is  defined  at
        runtime, a  call to FT_Done_FreeType will  dump memory statistics,
        including  the  list  of  leaked memory  blocks  with  the  source
        locations where  these were allocated.   It is always a  very good
        idea to define this in  development builds.  This works with _any_
        program linked to FreeType, but requires a big deal of memory (the
        debugging memory  manager never  frees the blocks  to the  heap in
        order to detect double frees).
    
        When  FT2_DEBUG_MEMORY isn't  defined  at  runtime, the  debugging
        memory manager is ignored, and performance is unaffected.
    
    
    II. Debugging macros
    --------------------
    
    Several  macros  can be  used  within  the  FreeType sources  to  help
    debugging its code:
    
    
      1. FT_ERROR(( ... ))
    
        This macro is used to send debug messages that indicate relatively
        serious errors  (like broken  font files), but  will not  stop the
        execution of the running program.   Its code is compiled only when
        either FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are defined in
        `ftoption.h'.
    
        Note that you have to use a printf-like signature, but with double
        parentheses, like in
    
          FT_ERROR(( "your %s is not %s\n", "foo", "bar" ));
    
    
      2. FT_ASSERT( condition )
    
        This macro is used to check  strong assertions at runtime.  If its
        condition isn't TRUE, the program will abort with a panic message.
        Its  code   is  compiled   when  either   FT_DEBUG_LEVEL_ERROR  or
        FT_DEBUG_LEVEL_TRACE   are  defined.    You   don't  need   double
        parentheses here.  For example
    
          FT_ASSERT( ptr != NULL );
    
    
      3. FT_TRACE( level, (message...) )
    
        The  FT_TRACE  macro is  used  to  send general-purpose  debugging
        messages during program execution.   This macro uses an *implicit*
        macro  named  FT_COMPONENT  used  to  name  the  current  FreeType
        component being run.
    
        The developer  should always  define FT_COMPONENT  as appropriate,
        for example as in
    
          #undef  FT_COMPONENT
          #define FT_COMPONENT  trace_io
    
        The  value  of the  FT_COMPONENT  macro  is an  enumeration  named
        `trace_XXXX' where `XXXX' is one of the component names defined in
        the internal  file `internal/fttrace.h'.   If you  modify FreeType
        source and insert new `trace_XXXX'  macro, you must register it in
        `fttrace.h'. If  you insert or  remove many trace macros,  you can
        check   the    undefined   or   the   unused    trace   macro   by
        `src/tools/chktrcmp.py'.
    
        Each such component is assigned a `debug level', ranging from 0 to
        7,  through   the  use  of  the   FT2_DEBUG  environment  variable
        (described below) when a program linked with FreeType starts.
    
        When FT_TRACE is  called, its level is compared to  the one of the
        corresponding component.  Messages with trace levels *higher* than
        the corresponding component level are filtered and never printed.
    
        This means  that trace messages  with level 0 are  always printed,
        those with  level 2 are only  printed when the component  level is
        *at least* 2.
    
        The  second parameter  to  FT_TRACE must  contain parentheses  and
        correspond to a printf-like call, as in
    
          FT_TRACE( 2, ( "your %s is not %s\n", "foo", "bar" ) )
    
        The   shortcut  macros   FT_TRACE0,  FT_TRACE1,   FT_TRACE2,  ...,
        FT_TRACE7 can  be used with  constant level indices, and  are much
        cleaner to use, as in
    
          FT_TRACE2(( "your %s is not %s\n", "foo", "bar" ));
    
    
    III. Environment variables
    --------------------------
    
    The  following  environment  variables control  debugging  output  and
    behaviour of FreeType at runtime.
    
    
      FT2_DEBUG
    
        This  variable   is  only  used   when  FreeType  is   built  with
        FT_DEBUG_LEVEL_TRACE  defined.  It  contains a  list of  component
        level definitions, following this format:
    
          component1:level1 component2:level2 component3:level3 ...
    
        where `componentX' is the name  of a tracing component, as defined
        in `fttrace.h', but without the  `trace_' prefix.  `levelX' is the
        corresponding level to use at runtime.
    
        `any'  is a  special component  name that  will be  interpreted as
        `any/all components'.  For example, the following definitions
    
          set FT2_DEBUG=any:2 memory:5 io:4        (on Windows)
          export FT2_DEBUG="any:2 memory:5 io:4"   (on Linux with bash)
    
        both stipulate that all components should have level 2, except for
        the memory and  io components which will be set  to trace levels 5
        and 4, respectively.
    
    
      FT2_DEBUG_MEMORY
    
        This environment variable,  when defined, tells FreeType  to use a
        debugging memory manager that will  track leaking memory blocks as
        well as other common errors like double frees.  It is also capable
        of  reporting _where_  the  leaking blocks  were allocated,  which
        considerably  saves  time  when  debugging new  additions  to  the
        library.
    
        This  code  is only  compiled  when  FreeType  is built  with  the
        FT_DEBUG_MEMORY macro #defined in  `ftoption.h' though, it will be
        ignored in other builds.
    
    
      FT2_ALLOC_TOTAL_MAX
    
        This variable is  ignored if FT2_DEBUG_MEMORY is  not defined.  It
        allows  you  to  specify  a  maximum  heap  size  for  all  memory
        allocations performed  by FreeType.  This  is very useful  to test
        the robustness  of the  font engine  and programs  that use  it in
        tight memory conditions.
    
        If it is undefined, or if its value is not strictly positive, then
        no allocation bounds are checked at runtime.
    
    
      FT2_ALLOC_COUNT_MAX
    
        This variable is  ignored if FT2_DEBUG_MEMORY is  not defined.  It
        allows  you to  specify  a maximum  number  of memory  allocations
        performed    by    FreeType    before    returning    the    error
        FT_Err_Out_Of_Memory.  This  is useful  for debugging  and testing
        the engine's robustness.
    
        If it is undefined, or if its value is not strictly positive, then
        no allocation bounds are checked at runtime.
    
    ------------------------------------------------------------------------
    
    Copyright 2002-2015 by
    David Turner, Robert Wilhelm, and Werner Lemberg.
    
    This  file is  part  of the  FreeType  project, and  may  only be  used,
    modified,  and  distributed under  the  terms  of  the FreeType  project
    license, LICENSE.TXT.  By continuing  to use, modify, or distribute this
    file  you indicate that  you have  read the  license and  understand and
    accept it fully.
    
    
    --- end of DEBUG ---