当发生崩溃时,如何安全地报告 Lua 堆栈跟踪?

如果在 C++ 中调用的 Lua 代码包含无效指针,则可能会发生崩溃。但撤消的堆栈跟踪仅包含类似 'lua_xxxx' 的 C++ 函数。没有 Lua 堆栈跟踪很难确定发生了什么。

我想在客户端崩溃时向我们的服务器报告 Lua 堆栈跟踪。但是有一些问题我不太确定。

1.如果堆栈或堆栈被无效的内存写入搞乱了,我如何安全地读取 Lua 堆栈跟踪而不会发生二次崩溃? 2.通常,崩溃处理程序函数在另一个进程中调用。从主线程获取 Lua VM 是否安全?

我在崩溃处理程序进程中获取 Lua VM 并使用以下代码:

luaL_traceback(L, L, NULL, 1);
const char* s = lua_tostring(L, -1);

但在某些情况下,它会导致二次崩溃。

我正在考虑的备选计划是使用点 + 偏移量读取 Lua 堆栈的原始内存,或将堆栈信息转储到特定的内存部分中。但它们都不理想。它们会导致额外的性能成本或潜在的崩溃风险。

点赞