[Logo] LUA Форум
  [Search] Search   [Recent Topics] Recent Topics   [Hottest Topics] Hottest Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
LUA_ERRERR: ошибка при управлении _ERRORMESSAGE  XML
Forum Index » LUA: Общие вопросы
Author Message
jangle
Новичок
[Avatar]

Joined: 19/03/2008 14:10:21
Messages: 34
Offline

У меня есть программа (написана на PowerBASIC) где используется Lua-скриптинг. Когда в Lua скрипте происходит ошибка, я получаю на вершине стека LUA_ERRERR. И больше никакой информации об ошибке (нужны строка, символ, код ошибки и т.д.) Подскажите, как правильно выловить информацию об ошибке?
smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

Вообще-то информации предоставлено недостаточно. Как интегрируются PowerBASIC и Lua ?
Ну, а ошибка LUA_ERRERR, если это она на самом деле, - это "ошибка при обработке ошибки", поэтому не удивительно, что дополнительные данные об ошибке могут отсутствовать.
jangle
Новичок
[Avatar]

Joined: 19/03/2008 14:10:21
Messages: 34
Offline

Вообще-то информации предоставлено недостаточно. Как интегрируются PowerBASIC и Lua ?


Через Lua.dll, совершенно стандартное связывание через Lua API. Все работает нормально, за исключением обработчика ошибок в скрипте
Объясните на пальцах, как его устанавливать. По моему нужно использовать API функцию lua_error ?


smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

jangle wrote:
Вообще-то информации предоставлено недостаточно. Как интегрируются PowerBASIC и Lua ?


Через Lua.dll, совершенно стандартное связывание через Lua API. Все работает нормально, за исключением обработчика ошибок в скрипте
Объясните на пальцах, как его устанавливать. По моему нужно использовать API функцию lua_error ?
В таком случае, нужно использовать luaL_error.
jangle
Новичок
[Avatar]

Joined: 19/03/2008 14:10:21
Messages: 34
Offline

В моей Lua.dll нет такой функции, вот список всех функций:

lua_atpanic
lua_baselibopen
lua_call
lua_checkstack
lua_close
lua_concat
lua_cpcall
lua_dblibopen
lua_dobuffer
lua_dofile
lua_dostring
lua_dump
lua_equal
lua_error
lua_getfenv
lua_getgccount
lua_getgcthreshold
lua_gethook
lua_gethookcount
lua_gethookmask
lua_getinfo
lua_getlocal
lua_getmetatable
lua_getstack
lua_gettable
lua_gettop
lua_getupvalue
lua_insert
lua_iolibopen
lua_iscfunction
lua_isnumber
lua_isstring
lua_isuserdata
lua_lessthan
lua_load
lua_loadlibopen
lua_mathlibopen
lua_newtable
lua_newthread
lua_newuserdata
lua_next
lua_open
lua_pcall
lua_pushboolean
lua_pushcclosure
lua_pushlightuserdata
lua_pushlstring
lua_pushnil
lua_pushnumber
lua_pushstring
lua_pushupvalues
lua_pushvalue
lua_pushvfstring
lua_rawequal
lua_rawget
lua_rawgeti
lua_rawset
lua_rawseti
lua_remove
lua_replace
lua_resume
lua_setfenv
lua_setgcthreshold
lua_sethook
lua_setlocal
lua_setmetatable
lua_settable
lua_settop
lua_setupvalue
lua_strlen
lua_strlibopen
lua_tablibopen
lua_toboolean
lua_tocfunction
lua_tonumber
lua_topointer
lua_tostring
lua_tothread
lua_touserdata
lua_type
lua_typename
lua_version
lua_xmove
lua_yield


smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

Что-то маловато. Вот что у меня:
luaL_addlstring
luaL_addstring
luaL_addvalue
luaL_argerror
luaL_buffinit
luaL_callmeta
luaL_checkany
luaL_checkinteger
luaL_checklstring
luaL_checknumber
luaL_checkoption
luaL_checkstack
luaL_checktype
luaL_checkudata
luaL_error
luaL_findtable
luaL_getmetafield
luaL_gsub
luaL_loadbuffer
luaL_loadfile
luaL_loadstring
luaL_newmetatable
luaL_newstate
luaL_openlib
luaL_openlibs
luaL_optinteger
luaL_optlstring
luaL_optnumber
luaL_prepbuffer
luaL_pushresult
luaL_ref
luaL_register
luaL_typerror
luaL_unref
luaL_where
lua_atpanic
lua_call
lua_checkstack
lua_close
lua_concat
lua_cpcall
lua_createtable
lua_dump
lua_equal
lua_error
lua_gc
lua_getallocf
lua_getfenv
lua_getfield
lua_gethook
lua_gethookcount
lua_gethookmask
lua_getinfo
lua_getlocal
lua_getmetatable
lua_getstack
lua_gettable
lua_gettop
lua_getupvalue
lua_insert
lua_iscfunction
lua_isnumber
lua_isstring
lua_isuserdata
lua_lessthan
lua_load
lua_newstate
lua_newthread
lua_newuserdata
lua_next
lua_objlen
lua_pcall
lua_pushboolean
lua_pushcclosure
lua_pushfstring
lua_pushinteger
lua_pushlightuserdata
lua_pushlstring
lua_pushnil
lua_pushnumber
lua_pushstring
lua_pushthread
lua_pushvalue
lua_pushvfstring
lua_rawequal
lua_rawget
lua_rawgeti
lua_rawset
lua_rawseti
lua_remove
lua_replace
lua_resume
lua_setallocf
lua_setfenv
lua_setfield
lua_sethook
lua_setlocal
lua_setmetatable
lua_settable
lua_settop
lua_setupvalue
lua_status
lua_toboolean
lua_tocfunction
lua_tointeger
lua_tolstring
lua_tonumber
lua_topointer
lua_tothread
lua_touserdata
lua_type
lua_typename
lua_xmove
lua_yield
luaopen_base
luaopen_debug
luaopen_io
luaopen_math
luaopen_os
luaopen_package
luaopen_string
luaopen_table
jangle
Новичок
[Avatar]

Joined: 19/03/2008 14:10:21
Messages: 34
Offline

У меня версия 5.0 вроде.
jangle
Новичок
[Avatar]

Joined: 19/03/2008 14:10:21
Messages: 34
Offline

А как использовать luaL_error для отлова ошибок?
smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

Всё равно у тебя отсутствуют все функции LuaL_* -- а они имеются и в Lua 5.0. Мне кажется, что в своё время Lua 5.0 собирался как 2 DLL: lua.dll и lualib.dll (это если я не ошибаюсь), видимо второй DLL у тебя отсутствует. А позднее уже стали собирать как один DLL.

Советую пойти на LuaForge, проект LuaBinaries -- и скачать, что тебе надо. Либо собрать самому из исходников.

А как использовать luaL_error для отлова ошибок?
А просто вызывай его, как написано в Справочнике, и ф-ция добавит нужную инф-цию к твоему тексту.

This message was edited 1 time. Last update was at 20/03/2008 15:33:51

jangle
Новичок
[Avatar]

Joined: 19/03/2008 14:10:21
Messages: 34
Offline

А другим способом, кроме luaL_error ошибку не поймать?

smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

jangle wrote:А другим способом, кроме luaL_error ошибку не поймать?

Что ты имеешь в виду, говоря "поймать ошибку" (это же не кошка ) ?
Если программа консольная, то обычный вызов lua_error выводит текст ошибки в консоль, но без номера строки и без стека вызова ф-ций. Если же вызывать luaL_error, то эта информация будет добавлена.

(Смотри также ф-цию lua_pcall в Справочнике).

This message was edited 2 times. Last update was at 20/03/2008 16:13:13

jangle
Новичок
[Avatar]

Joined: 19/03/2008 14:10:21
Messages: 34
Offline

Что ты имеешь в виду, говоря "поймать ошибку" (это же не кошка ) ?


Моя программа (не консольная) загружает Lua-скрипт, который делает некоторые настройки в ней.
Допустим, я сделал ошибку в тексте скрипта, ошибся в названии функции. Мне надо, чтобы в момент возникновения ошибки, моя программа выдала окошко с надписью:

Ошибка в Lua скрипте! Код ошибки - XX. Cтрока 10, позиция 7

Вот и все

(Смотри также ф-цию lua_pcall в Справочнике).


Я кстати, с помощью нее и вызываю функции из Lua скрипта, правда про последний параметр у нее понять не могу - errfunc это сишный указатель на функцию обработки ошибок?

This message was edited 2 times. Last update was at 20/03/2008 16:21:25

smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

jangle wrote:Мне надо, чтобы в момент возникновения ошибки, моя программа выдала окошко с надписью:
Ошибка в Lua скрипте! Код ошибки - XX. Cтрока 10, позиция 7

Если используется lua_pcall, и она возвращает не-нуль, то текст этой ошибки находится на вершине Lua-стека. Вот пример C-кода для не-консольной программы:

(Смотри также ф-цию lua_pcall в Справочнике).

Я кстати, с помощью нее и вызываю функции из Lua скрипта, правда про последний параметр у нее понять не могу - errfunc это сишный указатель на функцию обработки ошибок?
Нет, это индекс стека, где может быть помещена дополнительная ф-ция обработки, но если задать нулём, то этот параметр будет проигнорирован.
jangle
Новичок
[Avatar]

Joined: 19/03/2008 14:10:21
Messages: 34
Offline

Если используется lua_pcall, и она возвращает не-нуль, то текст этой ошибки находится на вершине Lua-стека. Вот пример C-кода для не-консольной программы:


Совершенно согласен. Но проблема в том, что всегда и при любых ошибках выдается только один текст, вот такого содержания:

error in error handlig
smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

jangle wrote:Совершенно согласен. Но проблема в том, что всегда и при любых ошибках выдается только один текст, вот такого содержания:

error in error handlig
Ну, а теперь смотри мой самый первый ответ в этой ветке.
 
Forum Index » LUA: Общие вопросы
Go to:   
Powered by JForum 2.1.9 © JForum Team