如何在 lua 脚本中设置断点
How to set breakpoint in lua scripts
我正在使用 C++ 编写一个大项目。本项目中会调用lua个脚本来实现功能。现在我想在 lua 脚本中设置断点,但我不知道该怎么做。对于 python,我更喜欢 "pdb.set_trace()"。
任何想法将不胜感激。提前致谢。
不幸的是,Lua 没有内置调试器,并且 Lua 独立版中可用的许多调试选项在嵌入式 Lua 场景中不可用。
处理这个问题的一种方法是 "script in" 调试 - 只需在整个代码中随意使用 print(whatever) 和 print(debug.traceback()) ,可能由DEBUG 全局(可能由 C++ 代码中的 DEBUG #define 设置)以便消息不会在生产可执行文件中发出。
此外,当使用 lua_pcall() 时,如果函数出错,它会调用 debug.traceback() 并将结果字符串放入堆栈。您可以通过以下方式获得它:
lua_pushcfunction(L, c_function_name);
lua_pushnumber(L, 5.3);
if (lua_pcall(L, 1, 0, 0) != 0) lua_error(L);
注意:none 除非您先打开调试库,否则使用 luaopen_debug(L);
其中 L 是您的 lua_State*
。
如果你真的需要交互式调试,就像@Colonel 三十二说的,你应该找一个交互式调试库;我确定有一个可用,但这超出了 Whosebug 问题的范围。
我正在使用 C++ 编写一个大项目。本项目中会调用lua个脚本来实现功能。现在我想在 lua 脚本中设置断点,但我不知道该怎么做。对于 python,我更喜欢 "pdb.set_trace()"。 任何想法将不胜感激。提前致谢。
不幸的是,Lua 没有内置调试器,并且 Lua 独立版中可用的许多调试选项在嵌入式 Lua 场景中不可用。
处理这个问题的一种方法是 "script in" 调试 - 只需在整个代码中随意使用 print(whatever) 和 print(debug.traceback()) ,可能由DEBUG 全局(可能由 C++ 代码中的 DEBUG #define 设置)以便消息不会在生产可执行文件中发出。
此外,当使用 lua_pcall() 时,如果函数出错,它会调用 debug.traceback() 并将结果字符串放入堆栈。您可以通过以下方式获得它:
lua_pushcfunction(L, c_function_name);
lua_pushnumber(L, 5.3);
if (lua_pcall(L, 1, 0, 0) != 0) lua_error(L);
注意:none 除非您先打开调试库,否则使用 luaopen_debug(L);
其中 L 是您的 lua_State*
。
如果你真的需要交互式调试,就像@Colonel 三十二说的,你应该找一个交互式调试库;我确定有一个可用,但这超出了 Whosebug 问题的范围。