c++ - 当使用 Lua 作为嵌入式语言时,例如 c++,是否有任何简单/方便的方法可以找到在 Lua 中定义变量的位置?
问题描述
我正在研究嵌入到 C++ 中的 Lua 脚本。我发现找到一个变量的原始定义真的很不方便,它在 Lua 中使用并且很可能在 c++ 中定义。例如,
function Guidance.get_turn_lanes(way,data)
local psv_fw, psv_bw = get_psv_counts(way,data)
local turn_lanes_fw, turn_lanes_bw = Tags.get_forward_backward_by_key(way,data,'turn:lanes')
local vehicle_lanes_fw, vehicle_lanes_bw = Tags.get_forward_backward_by_key(way,data,'vehicle:lanes')
return process_lanes(turn_lanes_fw,vehicle_lanes_fw,psv_bw,psv_fw) or turn_lanes, -- where to find the definition of variable turn_lanes?
process_lanes(turn_lanes_bw,vehicle_lanes_bw,psv_fw,psv_bw) or turn_lanes
end
现在我使用 Atom 的 Find in Project 选项卡来搜索关键字turn_lanes
以尝试定位它的定义位置。我想知道,有没有更好的方法来找到 的原始定义turn_lanes
?此外,一般来说,c++ 和 lua 是如何相互交流的?(我希望第二个问题不要太天真或太笼统。)
解决方案
是和否。
Lua 并不真正记得变量的定义位置(也不关心)。但是,您可以尝试一些技巧,具体取决于您要寻找的内容。
__newindex
元方法
例如,您可以将元方法附加__newindex
到_G
,每次定义新的全局变量时都会打印一些输出。放置在脚本中其他任何内容之前执行的某个地方。您可以使用它debug.getinfo
来确定您在调用堆栈中的位置。
也许您可以在-l
加载任何其他模块之前使用该标志来加载此hack(并在安装钩子之前潜入一个全局变量)
debug.getinfo
如果您正在寻找一个 Lua 函数,您可以使用它debug.getinfo
来确定该函数的定义位置。这对于在没有使用调试信息的情况下编译的代码效果较差luac -s
外部工具
在许多情况下,使用外部工具在代码中查找内容会更容易。您问题下的评论提到了一些不错的选择:
- ZeroBrane(一个 Lua IDE)
- git grep (如果你使用 git)
推荐阅读
- powerbi - 计算多个条件 - Power BI / DAX
- gallery - 如何使用 PowerApps 中的库更新多个数据库记录?
- python - 在 django-rest 管理视图中订购相关模型值
- javascript - Vuetify 中 v-calendar 的拖放操作仅在同一列上单击鼠标后触发
- python - 获取 Nifi PutSQL 处理器的最后执行时间戳
- microcontroller - 使用 ATMEL-ICE 闪烁 ATSAME51N19
- reactjs - 过滤列表在 React 中有一个击键延迟
- javascript - 如何使用包含 HTML 的字符串在 javascript 中模拟 mb_strlen
- excel - 对 Excel 中的索引/匹配查询感到沮丧
- angular - 当服务器发送在多个组件中使用的事件服务时,ngOnInit 不起作用