24 lines
1.2 KiB
Plaintext
24 lines
1.2 KiB
Plaintext
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).
|