如何调试Moonscript?

时间:2018-10-12 17:18:40

标签: love2d moonscript

我试图编写一些基于Love2d框架的游戏,该框架是从moonscript编译而来的。每当我在代码中出错时,我的应用程序都会引发错误,并且此错误是指已编译的lua代码,而不是月亮脚本,因此我不知道此错误的确切位置。请告诉我,在这种情况下有什么解决方案?谢谢。

2 个答案:

答案 0 :(得分:1)

几乎任何源到源编译系统的调试都是一个问题。目标语言不知道原始语言是否存在,因此只能用目标语言来谈论事物。目标语言和原始语言越多样化,调试就越困难。

这是C ++编译器不再编译为C的大部分原因。

处理此问题的唯一真实方法是,熟悉Moonscript编译器从您的Moonscript代码生成Lua的方式。学习Lua并仔细阅读输出Lua,并将其与给定的Moonscript进行比较。这样可以使您更轻松地将给定的Lua错误和源代码映射到创建该错误的实际Moonscript代码。

答案 1 :(得分:1)

Moonscript确实支持源映射/错误重写,但仅在moon解释器:https://moonscript.org/reference/command_line.html#error_rewriting

中运行时才受支持。

我认为可以在另一个lua环境中启用它,但是我不确定要涉及到什么。

这肯定会要求moonscript保留在编译期间创建的源映射表,因此您不能使用moonc;而是使用moonscript模块即时编译所需的模块:

main.lua

-- attempt to require moonscript,
-- for development
pcall(require, 'moonscript')

-- load the main file
require 'init'

init.moon

love.draw = ->
  print "test"

正确安装此代码和moonscript后,您可以照常使用love .运行项目。 require 'moonscript'调用将更改require,以便即时编译moonscript模块。性能损失可以忽略不计,并且在加载所有模块之后没有区别。