为什么Lua直接返回函数结果无法正确调试?

时间:2018-11-08 13:18:13

标签: debugging error-handling lua dynamic-programming error-messaging

我正在尝试做一个调试器函数,它向我显示错误发生的确切行,发生错误的函数名称以及定义函数的行。考虑以下代码:

function StatusLog(vet,vErr)
  local tInfo, sDbg = debug.getinfo(2), ""
  sDbg = sDbg.." "..(tInfo.linedefined and "["..tInfo.linedefined.."]" or "X")
  sDbg = sDbg..(tInfo.name and tInfo.name or "Main")
  sDbg = sDbg..(tInfo.currentline and ("["..tInfo.currentline.."]") or "X")
  sDbg = sDbg.."@"..(tInfo.source and (tInfo.source:gsub("^%W", "")) or "N")
  print("Debug: "..sDbg)
  return vRet
end

local function add(a,b)
  if(not a) then return StatusLog(nil, "Missing argument A") end
  if(not b) then
    StatusLog(nil, "Missing argument B")
    return nil
  end
  return (a + b)
end

print(add(1,   1)) --- Prints: "2" Normal  OK
print(add(1, nil)) --- Errors: [11]add[14] OK
print(add(nil, 1)) --- Errors: [0]Main[21] KO

您可以清楚地看到两个参数中的任何一个为nil时,函数add(a,b)会产生一个错误,但是,如果缺少参数B时,调试信息就可以了,何时参数A丢失了,调试信息有点坏。它必须显示与B相同的调试信息,但事实并非如此。可能是由于return StatusLog语句破坏了堆栈。

当我对参数A使用错误处理方法时,如何提取正确的调试信息作为函数名称,定义的行和错误的行?

0 个答案:

没有答案