.net - 嵌入式 Lua "print"无法在 Visual Studio 的 Debug模式下工作

标签 .net visual-studio lua embedded-language

我正在使用 Luainterface 2.0.3 将 Lua 嵌入到 c# 应用程序中。

一切正常,除了在 Visual Studio 的 Debug模式下,Lua 的打印功能不会写入控制台(也不会写入输出)。

using System;
using LuaInterface;

namespace Lua1 {
    class Program {
       static void Main(string[] args) {
          Lua lua = new Lua();
          lua.DoString("print 'Hello from Lua!'");
       }
    }
}    

在非 Debug模式下运行它,打印工作正常。

我错过了什么吗?

谢谢!

最佳答案

不幸的是,您可能遇到了print() 中的一个已知缺陷。函数,它实际上是为了在控制台提示符下进行快速而肮脏的调试,并且缺少一些必要的灵 active 。

基础库函数print() luaB_print() in lbaselib.c 实现显式使用 C 运行时的 stdout流作为其目的地。因为它引用了全局变量stdout在其实现中明确地,重定向它的唯一方法是导致该文件句柄被重定向。在可以通过调用 freopen(stdout,...) 来完成的 C 程序中.不幸的是,Lua 中没有库函数可以做到这一点。
io库在 liolib.c 中实现.它使用函数环境来保存打开文件描述符表,并在初始化期间创建 file名为 io.stdin 的对象, io.stdoutio.stderr对于三个标准描述符。它还提供了名为 io.output 的函数。和 io.input允许修改这两个描述符以指向任何打开的file对象(如果传递了文件名,则为新打开的文件)。但是,这些函数只是改变函数环境表,并不调用freopen()。修改 FILE 的 C 运行时表值(value)观。

我不知道 LuaInterface 如何尝试处理标准 C 运行时的 stdout 的想法.很可能是stdout没有连接到 VS 调试器中任何有用的东西,因为它可能利用一些 .NET 功能来捕获正在调试的模块的输出,这些输出在任何情况下都可能与 C 不完全兼容。

也就是说,很容易替换标准 print功能。只需使用 LuaInterface 的现有特性编写一个名为 print 的全局函数即可调用 tostring()在每个参数上并将其传递给标准输出设备。

关于.net - 嵌入式 Lua "print"无法在 Visual Studio 的 Debug模式下工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1466064/

相关文章:

python - 有没有办法在 Google App Engine (Python) 中运行 Lua 脚本?

visual-studio - 如何在安装 Visual Studio 2017 和 2019 后清理硬盘空间?

python - 如何添加 Python 对象的自定义 Visual Studio 调试 View ?

.net - 域模型中是否应该存在安全问题?

c# - 在 C#6.0 中编码但针对 .NET 2.0 进行编译的缺点

windows - 是什么导致 Visual Studio 2005 乱序命令行构建?

arrays - lua中,数组子元素

java - 在 OSX 10.5 上使用 LuaJava 的链接器错误

javascript - 使用 AES、Crypto.js 和 .NET 对 Websockets 聊天消息进行加密

c# - "[Authorize(Roles = ADMIN)]"中的括号在 ASP.NET 中意味着什么?