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

时间:2020-01-10 17:11:19

标签: android c++ ios lua crashlytics

如果Lua在C ++中调用的代码包含无效的指针,则可能会发生崩溃。但是展开的堆栈跟踪仅包含“ 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堆栈的原始内存,或者在每次Lua调用时将堆栈信息转储到特定的内存部分中。但是它们都不理想。它们将导致额外的性能成本或潜在的崩溃风险。

0 个答案:

没有答案