编译器在 Wine 下输出错误,但在 Windows 上不输出
Compiler outputs the errors under Wine, but not on Windows
我有 .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 or download the binary (32bit or 64bit) 进行上面的测试。
澄清:我使用两个单独的命令(编译并在之后打印错误日志)的主要障碍是 CI test 可能会在打印错误之前失败,这使得测试无用,这是一个故事另一个问题。所以我的目标是检查语法并一次性打印错误。
据支持团队称,Metaeditor 应用程序没有控制台,因此无法将日志输出到屏幕。所以似乎 wine
以不同的方式处理特殊的 CON
设备。我已将此问题报告给 服务台 ,它仍然开放,因此他们可能会在未来实施控制台支持。
目前唯一的解决方法是在编译文件后使用type
命令将日志文件输出到控制台(或在wine
下模拟)。即使编译器可以将它显示到控制台,它也不会与 CI 一起正常工作(在处理错误代码方面),因为 return 退出 metaeditor.exe
的逻辑是完全坏了,因为它 return 是成功编译文件的数量而不是错误代码(例如,如果你编译 20 个文件,你会得到 20 个错误代码?!)!因此,依赖 return 退出 metaeditor.exe
是一个错误,MQL 团队无论如何也不打算修复它,因为他们说这是他们认为应该如何工作的。
我有 .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 or download the binary (32bit or 64bit) 进行上面的测试。
澄清:我使用两个单独的命令(编译并在之后打印错误日志)的主要障碍是 CI test 可能会在打印错误之前失败,这使得测试无用,这是一个故事另一个问题。所以我的目标是检查语法并一次性打印错误。
据支持团队称,Metaeditor 应用程序没有控制台,因此无法将日志输出到屏幕。所以似乎 wine
以不同的方式处理特殊的 CON
设备。我已将此问题报告给 服务台 ,它仍然开放,因此他们可能会在未来实施控制台支持。
目前唯一的解决方法是在编译文件后使用type
命令将日志文件输出到控制台(或在wine
下模拟)。即使编译器可以将它显示到控制台,它也不会与 CI 一起正常工作(在处理错误代码方面),因为 return 退出 metaeditor.exe
的逻辑是完全坏了,因为它 return 是成功编译文件的数量而不是错误代码(例如,如果你编译 20 个文件,你会得到 20 个错误代码?!)!因此,依赖 return 退出 metaeditor.exe
是一个错误,MQL 团队无论如何也不打算修复它,因为他们说这是他们认为应该如何工作的。