【问题标题】:Compiler outputs the errors under Wine, but not on Windows编译器在 Wine 下输出错误,但在 Windows 上不输出
【发布时间】:2017-05-25 15:44:19
【问题描述】:

我的.mqh 源代码文件有语法错误,例如由以下命令创建:

echo some_error > fail.mqh

现在,我使用 Metaeditor 编译器检查语法,我的目标是将错误打印到标准输出 (CON),而不是将它们记录到文件 (/log:file.log)。见:Compiling

以下语法在 Linux/macOS 上运行良好,如下所示(也在 wine cmd.exe 下):

$ wine metaeditor.exe /s /log:CON /compile:fail.mqh
??fail.mqh : information: Checking 'fail.mqh'
fail.mqh(1,1) : error 116: 'some_error' - declaration without type
fail.mqh(1,1) : error 161: 'some_error' - unexpected end of program
 : information: Result 2 error(s), 0 warning(s)

请注意/log参数是必需的,否则编译器默认不打印任何内容。因此,如果指定了/log,则默认情况下会将编译结果记录到文件中。我正在使用特殊的CON 设备来显示错误。

问题是当我在 Windows (cmd) 上运行相同的命令时,我没有输出:

> metaeditor.exe /s /log:CON /compile:fail.mqh

CON:/con: 也一样。也在 PowerShell 上。

虽然CON 适用于echo,例如:echo test > CON

我可以假设它可能是编译器的错误,但是在 Wine 下它可以正常工作。为什么这只能在 Wine 下工作?

是否有另一种方法可以将错误输出到 Windows 上的终端屏幕,而不是日志文件?


注意:您可以install compiler from the site 或下载二进制文件(32bit64bit)进行上述测试。


澄清:我使用两个单独的命令(之后编译并打印错误日志)的主要障碍是CI test 在打印错误之前可能会失败,这使得测试毫无用处,这是另一个问题的故事。所以我的目标是一次性检查语法并打印错误。

【问题讨论】:

  • 我会省略参数 /log:CON 并最终添加错误输出重定向 `2>&1'
  • 但是默认情况下编译器不会在输出中打印任何内容,除非指定了/log,所以它默认将编译结果记录到文件中。
  • 看起来 metaeditor 在这些环境中的行为/交互方式不同。试试/log:con: 怎么样
  • 刚刚测试过,同样的。
  • metaeditor命令完成后为什么不直接输出日志文件?

标签: windows powershell command-line compilation mql


【解决方案1】:

据支持团队称,Metaeditor 应用程序没有控制台,因此无法将日志输出到屏幕。所以看起来wine 处理特殊的CON 设备的方式不同。我已向 Service Desk 报告了该问题,该问题仍处于打开状态,因此他们可能会在未来实施控制台支持。

目前唯一的解决方法是在编译文件后使用type 命令将日志文件输出到控制台(或在wine 下模拟它)。即使编译器可以将它显示到控制台,它也不能与 CI 一起正常工作(在处理错误代码方面),因为 metaeditor.exe 的返回退出逻辑完全被破坏了,因为它返回了成功编译的数量文件而不是错误代码(例如,如果你编译 20 个文件,你会得到 20 个错误代码?!)!因此,依赖 metaeditor.exe 的返回退出是一个错误,MQL 团队无论如何也不打算修复它,因为他们认为这是他们认为应该如何工作的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    相关资源
    最近更新 更多