如果Lua在C ++中调用的代码包含无效的指针,则可能会发生崩溃。但是展开的堆栈跟踪仅包含“ lua_xxxx”之类的C ++函数。没有Lua堆栈跟踪,很难确定发生了什么。
我想在客户端崩溃时向我们的服务器报告Lua堆栈跟踪。但是有些问题我不太确定。
我正在尝试在崩溃处理程序进程中获取Lua VM,并使用以下代码:
luaL_traceback(L, L, NULL, 1);
const char* s = lua_tostring(L, -1);
但是在某些情况下会导致二次崩溃。
我正在考虑的替代方案是读取带有点+偏移量的Lua堆栈的原始内存,或者在每次Lua调用时将堆栈信息转储到特定的内存部分中。但是它们都不理想。它们将导致额外的性能成本或潜在的崩溃风险。