当前位置:  开发笔记 > 编程语言 > 正文

嵌入式Lua"打印"在Visual Studio中无法在调试模式下工作

如何解决《嵌入式Lua"打印"在VisualStudio中无法在调试模式下工作》经验,为你挑选了1个好方法。

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

一切都运行正常,除了在Visual Studio的调试模式下,Lua的打印功能不会写入控制台(也不会写入输出).

using System;
using LuaInterface;

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

在非调试模式下运行,打印工作正常.

我错过了什么吗?

谢谢!



1> RBerteig..:

不幸的是,你可能会遇到print()函数中已知的缺陷,它实际上是用于在控制台提示符下进行快速和脏调试,并且缺少一些必要的灵活性.

lbaselib.c中print()实现的基本库函数显式使用C运行时的流作为其目标.由于它在其实现中明确引用全局变量,因此重定向它的唯一方法是使该文件句柄被重定向.在C程序中,可以通过调用来完成.不幸的是,Lua中没有库存库功能可以做到这一点.luaB_print()stdoutstdoutfreopen(stdout,...)

io库在liolib.c中实现.它使用函数环境来保存打开文件描述符的表,并在其初始化期间创建file名为的对象io.stdin,io.stdout以及io.stderr三个标准描述符.它还提供了命名的函数,io.outputio.input允许修改这两个描述符以指向任何打开的file对象(如果传递文件名,则指向新打开的文件).但是,这些函数只更改函数环境表,不调用freopen()修改C运行时的FILE值表.

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

也就是说,更换标准print功能很容易.只需使用LuaInterface的现有功能编写一个名为print调用tostring()每个参数的全局函数,并将其传递给任何.NET标准输出设备.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有