Collect a backtrace
The backtrace library is an unsupported feature, due to its fragility.
For more information, see
in the QNX Neutrino technotes.|
int bt_get_backtrace( bt_accessor_t *acc,
int len );
- A pointer to a bt_accessor_t structure.
This is an opaque structure that holds the identity of the thread to
- An array of bt_addr_t members where the function
can store the addresses; addrs is the top of stack.
- The maximum number of addresses to collect and store in addrs.
Use the -l backtrace option to
to link against this library.
The bt_get_backtrace() function collects a backtrace up to
The behavior depends on how you initialized the accessor when you called
- If BT_SELF, the library uses direct memory access to
gather the information from the stack.
- If BT_THREAD, or for BT_PROCESS where the
process ID and thread ID are for the calling thread, the library uses direct
- For BT_THREAD where the thread ID isn't for the calling
thread, or for BT_PROCESS with the process ID of the
calling process and the thread ID other than that of the calling thread,
the library stops the thread, fetches the thread context and registers,
uses direct memory access, and the restarts the thread.
- For BT_PROCESS where the process ID isn't that of the
calling process, the library stops the thread, fetches the thread
context and registers, uses
/proc/pid/as to access memory,
and then restarts the thread.
Note the following:
- When you're backtracing within the same process, if
bt_get_backtrace() attempts to access a non-existent memory
location, signals are masked, and SIGSEGV is trapped to
avoid crashing the program.
- QNX Neutrino 6.3.0 and earlier can't stop a single thread, so
in this case stopping a thread really means stopping all threads in the
- QNX Neutrino 6.3.2 and later can stop a single thread.
- If other applications and processes start and stop threads, it may
interfere with bt_get_backtrace().
The number of addresses stored in addrs.
in the QNX Neutrino technotes
in the Utilities Reference