Bonjour,

je souhaiterais pouvoir obtenir des messages d'erreurs de mes scripts LUA avec luabind aussi précis que ceux de l'interpréteur LUA.

Pour cela j'ai essayé ceci :

Main.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
#include <iostream>
#include <luabind/lua_include.hpp>
#include <luabind/luabind.hpp>
#include <sstream>
 
using namespace std;
 
int add_file_and_line(lua_State* L)
{
    lua_Debug d;
    lua_getstack(L, 1, &d);
    lua_getinfo(L, "Sln", &d);
    std::string err = lua_tostring(L, -1);
    lua_pop(L, 1);
    std::stringstream msg;
    msg << d.short_src << ":" << d.currentline;
 
    if (d.name != 0)
    {
        msg << "(" << d.namewhat << " " << d.name << ")";
    }
    msg << " " << err;
    lua_pushstring(L, msg.str().c_str());
    return 1;
}
 
int main()
{
    lua_State *state = luaL_newstate();
    luaL_openlibs(state);
 
    luabind::open(state);
    luabind::set_pcall_callback(&add_file_and_line);
 
    try
    {
        luaL_dofile(state, "script.lua");
        luabind::call_function<void>(state, "main");
    }
    catch(luabind::error &e)
    {
        luabind::object error_msg(luabind::from_stack(e.state(), -1));
        std::cout << error_msg << std::endl;
    }
 
    lua_close(state);
 
    return EXIT_SUCCESS;
}
Avec par exemple ce genre de script, j'ai fait volontaire une faute.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
function main()
    for i=1,10 do
        print("pouet !")
    --end error
end
L'interpréteur LUA me renvoit ce message d'erreur : 'end' expected (to close 'function' at line 1) near <eof> !
Malheureusement tout ce que je peux trouver avec luabind et qu'il y a une erreur... Il y a bien des exceptions qui se lève, mais il n'y a aucun message d'erreur qui les accompagnes.

Je ne vois pas exactement ce qu'il faut faire en luabind pour gérer correctement les erreurs et les exceptions, voir même si c'est possible d'obtenir ce genre de message.

Merci d'avance pour votre aide.