使用带有自己的 lua 解释器的 ZeroBrane Studio 调试 lua 应用程序
Debuging lua application using ZeroBraneStudio with own lua interpreter
我想在 Windows 7.
上使用 ZeroBraneStudio 1.4 和我自己的 lua 解释器 (5.1) 调试我的应用程序
我在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 '.\ssl\x509.lua'
no file '<PATH_OWN_INTERPRETER>\lua\ssl\x509.lua'
no file '<PATH_OWN_INTERPRETER>\lua\ssl\x509\init.lua'
no file '<PATH_OWN_INTERPRETER>\ssl\x509.lua'
no file '<PATH_OWN_INTERPRETER>\ssl\x509\init.lua'
no file './ssl\x509.lua'
no file './ssl\x509/init.lua'
no file './lua/ssl\x509.lua'
no file './lua/ssl\x509/init.lua'
no file '<PATH_ZBS>\lualibs/ssl\x509/ssl\x509.lua'
no file '<PATH_ZBS>\lualibs/ssl\x509.lua'
no file '<PATH_ZBS>\lualibs/ssl\x509/ssl\x509/init.lua'
no file '<PATH_ZBS>\lualibs/ssl\x509/init.lua'
no file '../CommonScripts/ssl\x509.lua'
no file '.\ssl\x509.dll'
no file '.\ssl\x50951.dll'
no file '<PATH_OWN_INTERPRETER>\ssl\x509.dll'
no file '<PATH_OWN_INTERPRETER>\ssl\x50951.dll'
no file '<PATH_OWN_INTERPRETER>\clibs\ssl\x509.dll'
no file '<PATH_OWN_INTERPRETER>\clibs\ssl\x50951.dll'
no file '<PATH_OWN_INTERPRETER>\loadall.dll'
no file '<PATH_OWN_INTERPRETER>\clibs\loadall.dll'
no file '<PATH_ZBS>\bin/ssl\x509.dll'
no file '<PATH_ZBS>\bin/clibs/ssl\x509.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>\ssl\https.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'
ZBS 似乎将内置 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 和二进制)组件。
显然当 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>\lua\ssl\ssl.lua
并且没有包含在上面的列表中。
所以,我的解决方案是将 LUA_PATH
定义为环境变量,这样我就可以得到
<PATH_OWN_INTERPRETER>/?.lua;
<PATH_OWN_INTERPRETER>/lua/?.lua;
<PATH_OWN_INTERPRETER>/lua/?/?.lua;
在路径中。
我想在 Windows 7.
上使用 ZeroBraneStudio 1.4 和我自己的 lua 解释器 (5.1) 调试我的应用程序我在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 '.\ssl\x509.lua'
no file '<PATH_OWN_INTERPRETER>\lua\ssl\x509.lua'
no file '<PATH_OWN_INTERPRETER>\lua\ssl\x509\init.lua'
no file '<PATH_OWN_INTERPRETER>\ssl\x509.lua'
no file '<PATH_OWN_INTERPRETER>\ssl\x509\init.lua'
no file './ssl\x509.lua'
no file './ssl\x509/init.lua'
no file './lua/ssl\x509.lua'
no file './lua/ssl\x509/init.lua'
no file '<PATH_ZBS>\lualibs/ssl\x509/ssl\x509.lua'
no file '<PATH_ZBS>\lualibs/ssl\x509.lua'
no file '<PATH_ZBS>\lualibs/ssl\x509/ssl\x509/init.lua'
no file '<PATH_ZBS>\lualibs/ssl\x509/init.lua'
no file '../CommonScripts/ssl\x509.lua'
no file '.\ssl\x509.dll'
no file '.\ssl\x50951.dll'
no file '<PATH_OWN_INTERPRETER>\ssl\x509.dll'
no file '<PATH_OWN_INTERPRETER>\ssl\x50951.dll'
no file '<PATH_OWN_INTERPRETER>\clibs\ssl\x509.dll'
no file '<PATH_OWN_INTERPRETER>\clibs\ssl\x50951.dll'
no file '<PATH_OWN_INTERPRETER>\loadall.dll'
no file '<PATH_OWN_INTERPRETER>\clibs\loadall.dll'
no file '<PATH_ZBS>\bin/ssl\x509.dll'
no file '<PATH_ZBS>\bin/clibs/ssl\x509.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>\ssl\https.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'
ZBS 似乎将内置 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 和二进制)组件。
显然当 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>\lua\ssl\ssl.lua
并且没有包含在上面的列表中。
所以,我的解决方案是将 LUA_PATH
定义为环境变量,这样我就可以得到
<PATH_OWN_INTERPRETER>/?.lua;
<PATH_OWN_INTERPRETER>/lua/?.lua;
<PATH_OWN_INTERPRETER>/lua/?/?.lua;
在路径中。