| Author |
Message |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 20/03/2008 13:28:07
|
jangle
Новичок
![[Avatar]](/forum/images/avatar/642e92efb79421734881b53e1e1b18b6.jpg)
Joined: 19/03/2008 14:10:21
Messages: 34
Offline
|
У меня есть программа (написана на PowerBASIC) где используется Lua-скриптинг. Когда в Lua скрипте происходит ошибка, я получаю на вершине стека LUA_ERRERR. И больше никакой информации об ошибке (нужны строка, символ, код ошибки и т.д.) Подскажите, как правильно выловить информацию об ошибке?
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 20/03/2008 15:05:20
|
smz
ГУРУ
Joined: 14/03/2008 13:23:00
Messages: 282
Offline
|
Вообще-то информации предоставлено недостаточно. Как интегрируются PowerBASIC и Lua ?
Ну, а ошибка LUA_ERRERR, если это она на самом деле, - это "ошибка при обработке ошибки", поэтому не удивительно, что дополнительные данные об ошибке могут отсутствовать.
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 20/03/2008 15:10:03
|
jangle
Новичок
![[Avatar]](/forum/images/avatar/642e92efb79421734881b53e1e1b18b6.jpg)
Joined: 19/03/2008 14:10:21
Messages: 34
Offline
|
Вообще-то информации предоставлено недостаточно. Как интегрируются PowerBASIC и Lua ?
Через Lua.dll, совершенно стандартное связывание через Lua API. Все работает нормально, за исключением обработчика ошибок в скрипте
Объясните на пальцах, как его устанавливать. По моему нужно использовать API функцию lua_error ?
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 20/03/2008 15:14:10
|
smz
ГУРУ
Joined: 14/03/2008 13:23:00
Messages: 282
Offline
|
jangle wrote:
Вообще-то информации предоставлено недостаточно. Как интегрируются PowerBASIC и Lua ?
Через Lua.dll, совершенно стандартное связывание через Lua API. Все работает нормально, за исключением обработчика ошибок в скрипте
Объясните на пальцах, как его устанавливать. По моему нужно использовать API функцию lua_error ?
В таком случае, нужно использовать luaL_error.
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 20/03/2008 15:18:33
|
jangle
Новичок
![[Avatar]](/forum/images/avatar/642e92efb79421734881b53e1e1b18b6.jpg)
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
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 20/03/2008 15:21:45
|
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
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 20/03/2008 15:22:37
|
jangle
Новичок
![[Avatar]](/forum/images/avatar/642e92efb79421734881b53e1e1b18b6.jpg)
Joined: 19/03/2008 14:10:21
Messages: 34
Offline
|
У меня версия 5.0 вроде.
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 20/03/2008 15:31:18
|
jangle
Новичок
![[Avatar]](/forum/images/avatar/642e92efb79421734881b53e1e1b18b6.jpg)
Joined: 19/03/2008 14:10:21
Messages: 34
Offline
|
А как использовать luaL_error для отлова ошибок?
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 20/03/2008 15:31:33
|
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
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 20/03/2008 15:59:01
|
jangle
Новичок
![[Avatar]](/forum/images/avatar/642e92efb79421734881b53e1e1b18b6.jpg)
Joined: 19/03/2008 14:10:21
Messages: 34
Offline
|
А другим способом, кроме luaL_error ошибку не поймать?
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 20/03/2008 16:08:47
|
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
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 20/03/2008 16:15:10
|
jangle
Новичок
![[Avatar]](/forum/images/avatar/642e92efb79421734881b53e1e1b18b6.jpg)
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
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 20/03/2008 16:50:57
|
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 это сишный указатель на функцию обработки ошибок?
Нет, это индекс стека, где может быть помещена дополнительная ф-ция обработки, но если задать нулём, то этот параметр будет проигнорирован.
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 20/03/2008 16:56:35
|
jangle
Новичок
![[Avatar]](/forum/images/avatar/642e92efb79421734881b53e1e1b18b6.jpg)
Joined: 19/03/2008 14:10:21
Messages: 34
Offline
|
Если используется lua_pcall, и она возвращает не-нуль, то текст этой ошибки находится на вершине Lua-стека. Вот пример C-кода для не-консольной программы:
Совершенно согласен. Но проблема в том, что всегда и при любых ошибках выдается только один текст, вот такого содержания:
error in error handlig
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 20/03/2008 17:27:20
|
smz
ГУРУ
Joined: 14/03/2008 13:23:00
Messages: 282
Offline
|
jangle wrote:Совершенно согласен. Но проблема в том, что всегда и при любых ошибках выдается только один текст, вот такого содержания:
error in error handlig
Ну, а теперь смотри мой самый первый ответ в этой ветке.
|
|
|
 |
|
|