Получить обратную трассировку
![]() | Библиотека обратной трассировки не поддерживается из-за ее недостаточной надежности. |
#include <backtrace.h>int bt_get_backtrace( bt_accessor_t *acc,bt_addr_t *addrs,int len );
bt_accessor_t
. Это непрозрачная структура, в которой хранится идентификатор потока, для которого нужно выполнить обратную трассировку.in_addr_t
, в котором функция может хранить адреса; addrs[0] - это вершина стека.libbacktrace
Функция bt_get_backtrace() собирает обратную трассировку на глубину до len. Поведение функции зависит от того, как вы инициализировали средство доступа при вызове bt_init_accessor():
BT_SELF
, библиотека использует прямой доступ к памяти для сбора информации из стека. BT_THREAD
или BT_PROCESS
, где идентификатор процесса и идентификатор потока относятся к вызывающему потоку, библиотека использует прямой доступ к памяти. BT_THREAD
, где идентификатор потока не для вызывающего потока, или для BT_PROCESS
с идентификатором процесса вызывающего процесса и идентификатором потока, отличным от идентификатора вызывающего потока, библиотека останавливает поток, выбирает контекст потока и регистры, использует прямой доступ к памяти и перезапускает поток. BT_PROCESS
, где идентификатор процесса не совпадает с идентификатором вызывающего процесса, библиотека останавливает поток, извлекает контекст потока и регистры, использует /proc/pid/as
для доступа к памяти, а затем перезапускает поток. Обратите внимание:
SIGSEGV
, чтобы избежать сбоя программы. Количество адресов в addrs.
ЗОСРВ «Нейтрино»
bt_init_accessor(), bt_load_memmap(), bt_release_accessor(), bt_set_flags(), bt_sprn_memmap(), bt_sprnf_addrs(), bt_translate_addrs(), bt_unload_memmap()
Примеры использования и сведения об архитектуре библиотеки доступны в разделе общие сведения.
pidin backtrace в Справочнике по Утилитам
Предыдущий раздел: Описание API библиотеки backtrace