gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:32:17 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com