The primary goal of this project is to define a portable and efficient
C programming interface (API) to determine the call-chain of a
program. The API additionally provides the means to manipulate the
preserved (callee-saved) state of each call-frame and to resume
execution at any point in the call-chain (non-local goto). The API
supports both local (same-process) and remote (across-process)
operation. As such, the API is useful in a number of
applications. Some examples include:
- exception handling
- The libunwind API makes it trivial to implement the
stack-manipulation aspects of exception handling.
- debuggers
- The libunwind API makes it trivial for debuggers to generate the
call-chain (backtrace) of the threads in a running program.
- introspection
- It is often useful for a running thread to determine its
call-chain. For example, this is useful to display error messages
(to show how the error came about) and for performance
monitoring/analysis.
- efficient setjmp()
- With libunwind, it is possible to implement an extremely
efficient version of setjmp(). Effectively, the only context that
needs to be saved consists of the stack-pointer(s).