使用Zerobranestudio与自己的LUA解释器一起调试LUA应用程序



我想使用我自己的lua解释器(5.1)在Windows 7上使用Zerobranestudio 1.4调试我的应用程序。

我将user.lua中的解释器设置为

path.lua = '<PATH_OWN_INTERPRETER>'

my_app.lua具有以下作为第一行

package.path = package.path .. ';../CommonScripts/?.lua'
print(package.path)

哪个打印

;.?.lua;<PATH_OWN_INTERPRETER>lua?.lua;<PATH_OWN_INTERPRETER>lua?init.lua;<PATH_OWN_INTERPRETER>?.lua;<PATH_OWN_INTERPRETER>?init.lua;./?.lua;./?/init.lua;./lua/?.lua;./lua/?/init.lua;<PATH_ZBS>lualibs/?/?.lua;<PATH_ZBS>lualibs/?.lua;<PATH_ZBS>lualibs/?/?/init.lua;<PATH_ZBS>lualibs/?/init.lua;../CommonScripts/?.lua

当我开始调试时,发生以下错误。

<PATH_ZBS>lualibs/ssl.lua:19: module 'ssl.x509' not found:
    no field package.preload['ssl.x509']
    no file '.sslx509.lua'
    no file '<PATH_OWN_INTERPRETER>luasslx509.lua'
    no file '<PATH_OWN_INTERPRETER>luasslx509init.lua'
    no file '<PATH_OWN_INTERPRETER>sslx509.lua'
    no file '<PATH_OWN_INTERPRETER>sslx509init.lua'
    no file './sslx509.lua'
    no file './sslx509/init.lua'
    no file './lua/sslx509.lua'
    no file './lua/sslx509/init.lua'
    no file '<PATH_ZBS>lualibs/sslx509/sslx509.lua'
    no file '<PATH_ZBS>lualibs/sslx509.lua'
    no file '<PATH_ZBS>lualibs/sslx509/sslx509/init.lua'
    no file '<PATH_ZBS>lualibs/sslx509/init.lua'
    no file '../CommonScripts/sslx509.lua'
    no file '.sslx509.dll'
    no file '.sslx50951.dll'
    no file '<PATH_OWN_INTERPRETER>sslx509.dll'
    no file '<PATH_OWN_INTERPRETER>sslx50951.dll'
    no file '<PATH_OWN_INTERPRETER>clibssslx509.dll'
    no file '<PATH_OWN_INTERPRETER>clibssslx50951.dll'
    no file '<PATH_OWN_INTERPRETER>loadall.dll'
    no file '<PATH_OWN_INTERPRETER>clibsloadall.dll'
    no file '<PATH_ZBS>bin/sslx509.dll'
    no file '<PATH_ZBS>bin/clibs/sslx509.dll'
    no module 'ssl.x509' in file '<PATH_OWN_INTERPRETER>ssl.dll'
stack traceback:
    [C]: in function 'require'
    <PATH_ZBS>lualibs/ssl.lua:19: in main chunk
    [C]: in function 'require'
    <PATH_OWN_INTERPRETER>sslhttps.lua:10: in main chunk
    [C]: in function 'require'
    ../CommonScripts/Class2.lua:36: in main chunk
    [C]: in function 'require'
    ../CommonScripts/Class1.lua:40: in main chunk
    [C]: in function 'require'
    my_app.lua:48: in main chunk

我在 Class2.lua:36

中有以下行
local https = require'ssl.https'

似乎ZB将内置的Lua解释器的目录与我想使用的目录混合在一起。

我该如何预防?

显然是将user.lua中的LUA路径设置为

path.lua = '<PATH_OWN_INTERPRETER>'

它由Zerobrane Studio扩展到

<PATH_OWN_INTERPRETER>lua?.lua;
<PATH_OWN_INTERPRETER>lua?init.lua;
<PATH_OWN_INTERPRETER>?.lua;
<PATH_OWN_INTERPRETER>?init.lua;

在我自己的解释器中,SSL位于上面列表中的<PATH_OWN_INTERPRETER>luasslssl.lua

所以,我的解决方案是将LUA_PATH定义为环境变量,以便我得到

<PATH_OWN_INTERPRETER>/?.lua;
<PATH_OWN_INTERPRETER>/lua/?.lua;
<PATH_OWN_INTERPRETER>/lua/?/?.lua;

在路径中。

@egorskriptunoff在他的评论中是正确的:您有<PATH_OWN_INTERPRETER>ssl.dll,它似乎没有ssl.x509模块(no module 'ssl.x509' in file '<PATH_OWN_INTERPRETER>ssl.dll'),并且没有<PATH_OWN_INTERPRETER>ssl.lua,因此该模块的LUA版本是从Zerobrane Studio文件夹中加载,但是该模块的二进制部分是从LUA文件夹中加载的,并且缺少(由于某种原因,X509组件)。您需要同时使用(LUA和二进制)组件。

最新更新