[Logo]
LUA Форум
  [Search] Поиск   [Recent Topics] Последние темы   [Hottest Topics] Горячие темы   [Members]  Список участников   [Groups] На главную страницу 
[Register] Регистрация / 
[Login] Вход 
LUA_ERRERR: ошибка при управлении _ERRORMESSAGE  XML
Индекс форума » LUA: Общие вопросы
Автор Сообщение
jangle
Новичок
[Avatar]

Зарегистрирован: 19/03/2008 14:10:21
Сообщений: 34
Оффлайн

ок, спасибо за помощь, буду разбираться дальше
jangle
Новичок
[Avatar]

Зарегистрирован: 19/03/2008 14:10:21
Сообщений: 34
Оффлайн

В Lua не выводится позиция ошибочного символа в строке с ошибкой?

Для примера такой код:



После его запуска, на вершине стека оказывается такое сообщение:

[string ""]:2: attempt to call method 'write1' (a nil value)


Т.е. указан только номер строки с ошибкой, а номер ошибочного символа нет. Его можно получить?

smz
ГУРУ

Зарегистрирован: 14/03/2008 13:23:00
Сообщений: 245
Оффлайн

В Lua не выводится позиция ошибочного символа в строке с ошибкой?

Не выводится.

PS. Два совета, если можно:
1) сообщение, не связанное с сабжем, должно начинать новую тему
2) если проблема, поднятая в теме, разрешилась, то принято сообщать (для общей пользы) в чём было дело, иначе у людей в дальнейшем не будет желания отвечать.

Это сообщение было редактировано 1 раз. Последнее обновление произошло в 27/03/2008 17:24:48

jangle
Новичок
[Avatar]

Зарегистрирован: 19/03/2008 14:10:21
Сообщений: 34
Оффлайн

smz wrote:PS. Два совета, если можно:
1) сообщение, не связанное с сабжем, должно начинать новую тему
2) если проблема, поднятая в теме, разрешилась, то принято сообщать (для общей пользы) в чём было дело, иначе у людей в дальнейшем не будет желания отвечать.


Проблема частично устранилась заменой Lua.dll на новую версии 5.1.3
Частично, потому что на вершине стека все-таки стали появлятся сообщения об ошибках, однако например в таких случаях:



выдается неинформативная строка

attempt to call a nil value

Нет номера строки с ошибкой!

Это сообщение было редактировано 2 раз. Последнее обновление произошло в 27/03/2008 17:53:27

z00n
Постоянный посетитель

Зарегистрирован: 15/02/2008 12:15:56
Сообщений: 96
Оффлайн

jangle wrote:
Проблема частично устранилась заменой Lua.dll на новую версии 5.1.3
Частично, потому что на вершине стека все-таки стали появлятся сообщения об ошибках, однако например в таких случаях:



выдается неинформативная строка

attempt to call a nil value

Нет номера строки с ошибкой!


Странно, здесь нет попытки вызова nil value - здесь мы имеем банальную синтаксическую ошибку - expression in statement position.
Вот что говорит интерпретатор lua:
Т.е. луа ожидает , и заметьте, номер строки выводится.
А ваше сообщение attempt to call a nil value скорее всего относится к способу, которым вы обрабатываете ошику.
Приведите код, которым вы вызываете луа.
moteus
Постоянный посетитель

Зарегистрирован: 15/01/2008 22:12:04
Сообщений: 43
Оффлайн

Т.е. указан только номер строки с ошибкой, а номер ошибочного символа нет. Его можно получить?

В принцыпе эта информация обычно не нужна, т.к. в одной строке не содержится большого кол-ва однотипных операций.
И если посмотреть на пириведенный пример то масто ошибки становится очевидным.
Может быть вы приведете код где это действительно необходимо?
jangle
Новичок
[Avatar]

Зарегистрирован: 19/03/2008 14:10:21
Сообщений: 34
Оффлайн

z00n wrote:
Приведите код, которым вы вызываете луа.


Код у меня на PowerBASIC, но думаю все и так понятно. Правда некоторые функции Lua названы в хидерах PB чуть иначе чем в C.
Вероятно это сделано для совместимости с версией 5.0



Это сообщение было редактировано 1 раз. Последнее обновление произошло в 28/03/2008 11:27:37

jangle
Новичок
[Avatar]

Зарегистрирован: 19/03/2008 14:10:21
Сообщений: 34
Оффлайн

moteus wrote:
Может быть вы приведете код где это действительно необходимо?


У меня просто была задумка, сделать Lua скриптовым языком в моем приложении. На подобие как VBA встроен в MS Office, или внутренний язык 1C. Чтобы был, некий редактор в котором пишется "конфигурация" на Lua. Естественно, в процессе отладки такого скрипта будет много ошибок, синтаксических и т.д. И нужно, чтобы гарантированно выводился номер строки с ошибкой, чтобы пользователь мог понять в каком месте он ошибся, "attempt to call a nil value" - не дает никакой информации об этом

Это сообщение было редактировано 1 раз. Последнее обновление произошло в 28/03/2008 11:42:33

smz
ГУРУ

Зарегистрирован: 14/03/2008 13:23:00
Сообщений: 245
Оффлайн


Так делали в Lua 5.0, для Lua 5.1 это неправильно. Вот цитата из справочника (выделение - моё):
To have access to these libraries, the C host program should call the luaL_openlibs function, which opens all standard libraries. Alternatively, it can open them individually by calling luaopen_base (for the basic library), luaopen_package (for the package library), luaopen_string (for the string library), luaopen_table (for the table library), luaopen_math (for the mathematical library), luaopen_io (for the I/O library), luaopen_os (for the Operating System library), and luaopen_debug (for the debug library). These functions are declared in lualib.h and should not be called directly: you must call them like any other Lua C function, e.g., by using lua_call.


Читай справочник. luaL_loadbuffer только помещает на стек, а вот lua_pcall как раз запускает на исполнение. Без этого, ф-ция start и всё остальное в скрипте ещё не видны из Lua. Кроме того, вместо %LUA_MULTRET здесь лучше поставить 0, так как твой PowerBASIC-код не использует значения, возвращаемые исполненным скриптом.

3-й параметр задан единицей, но не вижу обработку величины, возвращаемой функцией start.

Это сообщение было редактировано 2 раз. Последнее обновление произошло в 28/03/2008 12:55:21

jangle
Новичок
[Avatar]

Зарегистрирован: 19/03/2008 14:10:21
Сообщений: 34
Оффлайн

Так делали в Lua 5.0, для Lua 5.1 это неправильно. Вот цитата из справочника (выделение - моё):


Но тем не менее, в Lua 5.1 такой способ подключения работает без ошибок

Читай справочник. luaL_loadbuffer только помещает на стек, а вот lua_pcall как раз запускает на исполнение. Без этого, ф-ция start и всё остальное в скрипте ещё не видны из Lua. Кроме того, вместо %LUA_MULTRET здесь лучше поставить 0, так как твой PowerBASIC-код не использует значения, возвращаемые исполненным скриптом


Поставил 0 вместо %LUA_MULTRET, ничего не изменилось
jangle
Новичок
[Avatar]

Зарегистрирован: 19/03/2008 14:10:21
Сообщений: 34
Оффлайн

Кстати, заметил еще одну странность, в коде:



Выдается ошибка - attempt to call a nil value

а если так:



Правильное описание ошибки - [string "start"]:3: attempt to call global 'xxxxxx' (a nil value)

Что-то на глюк уж больно смахивает.....

Это сообщение было редактировано 1 раз. Последнее обновление произошло в 28/03/2008 14:38:43

smz
ГУРУ

Зарегистрирован: 14/03/2008 13:23:00
Сообщений: 245
Оффлайн

jangle wrote:
Так делали в Lua 5.0, для Lua 5.1 это неправильно. Вот цитата из справочника (выделение - моё):


Но тем не менее, в Lua 5.1 такой способ подключения работает без ошибок

Только иногда, случайно и непредсказуемо. Хотим играть в лотерею или программировать надёжно?

Поставил 0 вместо %LUA_MULTRET, ничего не изменилось

Не изменилось, потому что твой скрипт ничего не возвращает. Как только он изменится и будет что-то возвращать, возвращаемые значения попадут на стек, что может быть чревато, если хост-программа не следит за балансом стека.

Кстати, заметил еще одну странность, в коде:



Выдается ошибка - attempt to call a nil value


Что-то на глюк уж больно смахивает.....

Это точно глюк, но только не в Lua.

jangle
Новичок
[Avatar]

Зарегистрирован: 19/03/2008 14:10:21
Сообщений: 34
Оффлайн

smz wrote:
Только иногда, случайно и непредсказуемо. Хотим играть в лотерею или программировать надёжно?


Поставил luaL_openlibs, все нормально работает как и прежде

Это точно глюк, но только не в Lua.


А в чем тогда глюк?

smz
ГУРУ

Зарегистрирован: 14/03/2008 13:23:00
Сообщений: 245
Оффлайн

jangle wrote:
smz wrote:
Только иногда, случайно и непредсказуемо. Хотим играть в лотерею или программировать надёжно?


Поставил luaL_openlibs, все нормально работает как и прежде

Прости, но ты как видно любишь поспорить. Причём даже не со мной, а со Справочником, где ясно написано, что так, как у тебя было, делать нельзя. И что значит "всё нормально работает", если программа выдаёт совершенно нерелевантные ошибки (за 4 года программирования на Lua я даже не видел таких ошибок).

smz wrote:Это точно глюк, но только не в Lua.

А в чем тогда глюк?

Глюк почти наверняка (99.9%) или в твоём коде, или в коде связки PowerBasic - Lua. Не могу сказать точнее, не видя кода.
jangle
Новичок
[Avatar]

Зарегистрирован: 19/03/2008 14:10:21
Сообщений: 34
Оффлайн

Глюк почти наверняка (99.9%) или в твоём коде, или в коде связки PowerBasic - Lua. Не могу сказать точнее, не видя кода.


В принципе, весь код показан в моем предыдущем посте. Возможно ошибка в связи PowerBasic - Lua, попробую сличить хидеры от C и PB. Кстати, момент с выдачей ошибки - единственная проблема, все остальное работает без нареканий.
 
Индекс форума » LUA: Общие вопросы
Перейти:   
Powered by JForum 2.1.8 © JForum Team