Как стать автором
Обновить

Комментарии 2

Для размотки стека perf по умолчанию использует механизм Frame pointer. Но альтернативно можно использовать размотку стека с помощью DWARF и ORC.

Ещё можно разматывать стек при помощи специальных хардварных регистров, но это поддерживается не всеми процессорами и не всеми виртуалками.

Эх, эту бы статью да год назад :) Мы у себя накрутили обвязку вокруг jit.p профайлера. Он в целом хорош, если нет острой необходимости провязывать стеки С/С++ с Lua. Правда, в многопоточной среде нужно быть аккуратным. К примеру, вот тут в зависимости от дефайнов сборки может не оказаться мьютекса: https://github.com/LuaJIT/LuaJIT/blob/v2.1/src/lj_profile.c#L29

Кстати, год-два назад Mike Pall вкоммитил полноценный dwarf unwind - External frame unwinding. И вроде как оно и для jit-кода должно работать. По крайней мере какие-то фреймы вот тут регистрируются: https://github.com/LuaJIT/LuaJIT/blob/v2.1/src/lj_err.c#L581
Непосредственно unwind: https://github.com/LuaJIT/LuaJIT/blob/v2.1/src/lj_err.c#L496

Зарегистрируйтесь на Хабре, чтобы оставить комментарий