Пожалуйста, прочтите страницу руководства для более точного отслеживания. Вы, кажется, ошибаетесь в отношении некоторых основ:
- Нет,
array
- это ваш буфер указателей, которые заполняются backtrace()
, чтобы указывать на кадры стека. Звонки на malloc()
не производятся.
- Вы, так как это ваша память.
- Не применимо,
backtrace()
не звонит malloc()
.
- Это часть GNU libc. Здесь является одной частью реализации.
- Возможно, скопировав указатель стека и вручную пройдя по стеку.
Вы, кажется, путаете backtrace()
с backtrace_symbols()
, последнее включает в себя выделение памяти.
Чтобы прочитать текущую обратную трассировку максимум до 64 уровней, просто выполните:
void *stack[64];
const int depth = backtrace(stack, sizeof stack / sizeof *stack);