Если код, который Lua, вызванный в C ++, содержит недопустимый указатель, может произойти cra sh. Но трассировка без стека содержит только функцию C ++, такую как 'lua_xxxx'. Трудно определить, что произошло без трассировки стека Lua.
Я хочу сообщить трассировку стека Lua нашему серверу в случае сбоя клиента. Но есть некоторые проблемы, в которых я не совсем уверен.
- Если куча или стек испорчены неправильной записью в память, как я могу безопасно прочитать трассировку стека Lua без вторичного кратера? sh?
- Обычно функция обработчика cra sh вызывается в другом процессе. Безопасно ли получить Lua VM из основного потока?
Я пытаюсь получить Lua VM в обработчике Cra sh и использовать следующий код:
luaL_traceback(L, L, NULL, 1);
const char* s = lua_tostring(L, -1);
Но в некоторых случаях это вызовет вторичный взлом sh.
Альтернативный план, о котором я думаю, состоит в том, чтобы читать необработанную память стека Lua с точкой + смещение или выгружать информацию стека в определенный раздел c памяти при каждом вызове Lua. Но оба они не идеальны. Они приведут к дополнительным потерям производительности или потенциальным рискам sh.