C# Lua中的仅调试范例?
在C/C++中,我们有C# Lua中的仅调试范例?,c#,c++,build,lua,xdebug,C#,C++,Build,Lua,Xdebug,在C/C++中,我们有 \ifdef\u调试 ... #恩迪夫 在C#中,我们有 #如果调试 ... #恩迪夫 及 [条件(“调试”)] 我不希望有任何东西像处理只调试代码的基于属性的方式那样奇特,但我想知道是否有一种清单常量之类的东西,或者任何其他方式使代码只出现在调试构建中。例如,我目前正在Lua做以下工作: 如果不是类型(parameters.callback)==“function”,则 错误(“回调”参数不是函数,或缺少(nil)。”; 结束 如果不是类型(parameter
\ifdef\u调试
...
#恩迪夫
在C#中,我们有
#如果调试
...
#恩迪夫
及
[条件(“调试”)]
我不希望有任何东西像处理只调试代码的基于属性的方式那样奇特,但我想知道是否有一种清单常量之类的东西,或者任何其他方式使代码只出现在调试构建中。例如,我目前正在Lua做以下工作:
如果不是类型(parameters.callback)==“function”,则
错误(“回调”参数不是函数,或缺少(nil)。”;
结束
如果不是类型(parameters.times)==“number”,则
错误(“times”参数不是数字或缺少(nil)。”;
结束
如果不是类型(parameters.interval)='number'或不是parameters.interval==nil,则
错误('interval'参数不是数字');
结束
我甚至不知道它是否会运行。对这门语言完全陌生
考虑到我正在编写的函数的性质,一个简单的retry
函数会计算尝试次数,一个可选的间隔和一个回调作为参数——我预计在整个应用程序编写过程中会多次使用它——并且它将在微控制器上运行——我觉得这些检查不应该在生产版本中进行,因为我猜它们可能会相对昂贵?!?!我甚至在for循环中进行类型检查
语言中是否已经内置了允许条件编译的东西?还是有人想出了一个干净整洁的方法来处理这类事情?我知道我可以声明一个全局变量,将其标记为调试构建,并简单地在上面放置和if块,但我想我会问
谷歌搜索让我一事无成。事实上,当我读到有关Lua的网站时,我感觉自己回到了90年代中后期的网络
谢谢,
李
编辑
或者我只是把这个方法写成一个C模块
使代码只出现在调试版本中的方法
Lua没有“构建”。这是一种解释性语言。在内部,它被编译成字节码,但这是一个实现细节
但是,如果您对构建步骤没有意见,那么您可以像C一样使用预编译器。事实上,您可以使用与您的C编译器相同的语法,然后您将获得您已经熟悉的语法
例如,我的MSVC旧副本使用cl/EP
通过预处理器运行filename
,并将输出转储到stdout。然后你可以写:
#ifdef _DEBUG
-- debug Lua code goes here
#endif
最干净的方式可能是
_DEBUG = true
if _DEBUG then
--code
end
所使用的Lua的风格是eLua或嵌入式Lua,它允许将脚本预编译为字节码 代码在GitHub上,所以如果时间允许,我将考虑提交一个补丁,允许真正的条件编译,因为它都是C代码 这样每个人都会受益。原始问题中的检查是否昂贵通常情况下,您需要代码输入或输出,这取决于您是在积极地处理它还是在生产环境中使用它,而不是相反 由于它们支持预编译,并且只针对具有不同性能和内存限制级别的嵌入式设备,如果它们还没有实现支持,我也不会感到惊讶。我会跳过去看看下一个
谢谢大家。不过我认为您的代码不会“昂贵”。Lua的速度非常快。成本问题来自于它将被用于微控制器,但所使用的特定控制器非常快。请看下面我的答案。别忘了接受帮助你的答案,我相信我的答案确实帮助了你。我提出了所有建议,并提出了一个额外的解决方案。