[ Development Environment and Global Settings | The ECLiPSe Built-In Predicates | Reference Manual | Alphabetic Index ]

# profile(+Goal, ++Flags)

Profile the goal and print the times spent in each predicate.

Goal
  Atom or a compound term.
Flags
  List of atoms.

## Description

This predicate invokes the profiler. The profiler first executes Goal in profiling mode, which means that during its execution interrupts are generated at regular intervals and the profiler remembers the currently executing predicate. When the goal succeeds or fails, the profiler prints so, and then it prints the statistics about the time spent in every encountered predicate. Goal can be any Prolog goal, it does not have to be compiled in a special profiling mode and no Prolog flags have to be set. The time spent in simple predicates (i.e. those with call_type external, written in C) is counted towards their parent predicate.

In cases where the predicate name is not available, e.g. local goals in a locked module, the information is grouped under a blank predicate name entry for the module.

Flags is a list of option flags:

simple
  obsolete
keep_file
  do not remove temporary data file when finished

A temporary file <tmp_dir>/eclipse.prof.<pid> is used to collect the profiling information and is removed upon exit (unless keep_file option is given).

### Modes and Determinism

- profile(+, ++) is det

### Exceptions

(6) out of range
  Flags contains an illegal flag.

## Examples

    [eclipse 6]: profile(boyer, []).
    rewriting...
    proving...
    goal succeeded

                    PROFILING STATISTICS
                    --------------------

    Goal:             boyer
    Total user time:  10.55s

    Predicate             Module         %Time  Time
    -------------------------------------------------
    =..               /2  sepia_kernel   31.1%  3.28s
    garbage_collect   /0  sepia_kernel   23.5%  2.48s
    rewrite           /2  eclipse        21.6%  2.28s
    rewrite_args      /2  eclipse        17.2%  1.82s
    equal             /2  eclipse         4.1%  0.43s
    remainder         /3  eclipse         0.9%  0.10s
    ...
    plus              /3  eclipse         0.1%  0.01s

    yes.

## See Also

get_flag / 2, profile / 1