debugging - 如何在lua脚本中设置断点

标签 debugging lua breakpoints

我正在使用 C++ 编写一个大型项目。在这个项目中,会调用一些lua脚本来实现功能。现在我想在 lua 脚本中设置断点,但我不知道该怎么做。对于 python,我更喜欢类似“pdb.set_trace()”的东西。 任何想法将不胜感激。提前致谢。

最佳答案

不幸的是,Lua 没有内置调试器,并且在 Lua 独立版中可用的许多调试选项在嵌入式 Lua 场景中不可用。

处理这个问题的一种方法是在调试中“编写脚本”——简单地在整个代码中自由地使用 print(whatever) 和 print(debug.traceback()),可能由 DEBUG 全局(可能设置)打开或关闭通过 DEBUG #define 在 C++ 代码中),这样消息就不会在生产可执行文件中发出。

此外,当使用 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);

注意:除非您首先使用 luaopen_debug(L); 打开调试库,否则这些都不起作用,其中 L 是您的 lua_State*

如果你真的需要交互式调试,正如@Colonel 三十二所说,你应该找到一个交互式调试库;我确定有一个可用,但这超出了 StackOverflow 问题的范围。

关于debugging - 如何在lua脚本中设置断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35432504/

相关文章:

javascript - Node.js:新版本中存在严重的内存泄漏错误?

java - 如何通过Java输出控制台运行GDB并接受GDB命令?

iOS 经常出现 "exhausted real (wall clock) time allowance of 10.00 seconds"

string - Lua string.find 找不到一行中的最后一个单词

C无缘无故进入for循环

ios - 代码。无法在断点处停止

ios - Xcode LLDB 断点条件 - 我可以在 C 函数值上中断吗?

node.js - 如何调试快速路由器

lua - redis.call/lua 参数的动态个数

mysql - ERROR 1105 (HY000) : #07000MySQL Proxy Lua script failed to load. 查看错误日志