调试ok时运行失败

时间:2013-09-16 09:55:10

标签: debugging lua

我有以下3个功能:

function getName() -- returns filename without ext
    local files = scandir(currentDir())
    local name = nil

    for i = 1, #files do
        if isValidExt( getExt(files[i]) ) then 
            name = getFilename(files[i]) 
            break 
        end
    end

    return name
end

function currentDir()
    local string = debug.getinfo(1).source
    local endPoint = getLastOcurrence(string, '/')
    local dir = string.sub(string, 2, endPoint)
    return dir
end

function getLastOcurrence(str, char) 
    local last = string.find(string.reverse(str), char, 1, true)
    return #str - last
 end

奇怪的是,调试结束没有问题,而运行时会出错:

...\Downloader.lua:22: attempt to perform arithmetic on local 'last' (a nil value)
stack traceback:
...\Downloader.lua:22: in function 'getLastOcurrence'
...\Downloader.lua:39: in function 'currentDir'
...\Downloader.lua:50: in function 'getName'

什么可能导致调试和运行之间的这种差异?

1 个答案:

答案 0 :(得分:1)

我的猜测是,当您处于调试模式时,您需要编译代码并去除调试信息,因此debug.getinfo(1).source不是文件名(并且不包含/字符)。尝试在currentDir()函数中打印其值。