luajit не может зацепить "возвращение хвоста"
Мы знаем, что Lua имеет библиотечную функцию debug.sethook
когда любая функция возвращается,
функция ловушки вызывается с событием return или tail return, но LuaJIT не перехватывает tail return.
Есть ли какие-нибудь методы, чтобы отключить специализацию LuaJIT и позволить ему перехватить "хвост возврата"?
1 ответ
Это "особенность" реализации LuaJIT, поэтому вряд ли вы сможете ее отключить. Как предположил автор LuaJIT, вы можете отслеживать глубину стека в ловушке, но вы не сможете специально отслеживать возвраты хвостового вызова.
Обратите внимание, что Lua также перешел от хвостовых возвратов к хвостовым вызовам: "Для событий вызова событием может быть LUA_HOOKCALL, обычное значение или LUA_HOOKTAILCALL, для хвостового вызова; в этом случае не будет соответствующего события возврата".