Netbeans控制台中的非顺序Ruby错误输出

Netbeans控制台中的非顺序Ruby错误输出,ruby,netbeans,netbeans-plugins,Ruby,Netbeans,Netbeans Plugins,我正在尝试开始使用NetBeans7.0进行rails开发,并且正在使用最新的ruby插件。作为记录,我将默认的1.8.7解释器切换为指向本地的1.9.2 ruby安装,但这两个解释器似乎都出现了这个问题 当ruby在我的代码中遇到错误时,错误输出会在我的控制台输出中随机显示。我本来希望它在遇到错误时打印错误,但看起来错误流和正常输出流正在不同的线程上更新。仅举一个例子…使用以下代码: (0..10).each { |o| puts "Normal output" } invalidSytax!

我正在尝试开始使用NetBeans7.0进行rails开发,并且正在使用最新的ruby插件。作为记录,我将默认的1.8.7解释器切换为指向本地的1.9.2 ruby安装,但这两个解释器似乎都出现了这个问题

当ruby在我的代码中遇到错误时,错误输出会在我的控制台输出中随机显示。我本来希望它在遇到错误时打印错误,但看起来错误流和正常输出流正在不同的线程上更新。仅举一个例子…使用以下代码:

(0..10).each { |o| puts "Normal output" }
invalidSytax!
我在第二行触发语法错误,但错误输出可能会有所不同。例如:

Normal output
Normal output
Normal output
~/LearnRuby/lib/ch1_ex2.rb:41:in `<main>': undefined method `invalidSytax!' for main:Object (NoMethodError)
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output
而且

~/LearnRuby/lib/ch1_ex2.rb:41:in `<main>': undefined method `invalidSytax!' for main:Object (NoMethodError)
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output
Normal output

你知道这是什么原因吗?在一个更大的项目中,我可以看到这是一个大问题,我可能认为我的代码没有问题,但在控制台流的开头确实输出了一条错误消息。

这是因为NetBeans对STDOUT和STDERR的内部处理,输出是不确定的,我想他们都是在两个不同的线程中处理的,就像你已经怀疑的那样。所以你很可能见证了这里的比赛情况

但这与是否使用Ruby无关——例如,当我为Java项目运行JUnit测试时,同样的情况也会发生,STDERR和STDOUT输出会不确定地混合

为什么你认为这是个问题?如果两个线程同时尝试写入NetBeans的控制台,并且没有合适的锁定机制,那么只要输出没有混合到乱七八糟的状态,就会发生这种情况,我不明白这有什么关系


web应用程序的日志文件也遵循同样的原则。如果许多客户端连接同时尝试将其信息记录到一个文件中,您将无法预测消息的显示顺序-在我看来,这种行为是多线程应用程序固有的。

Hmm。我不知道这是一个常见问题。我已经很长时间没有在netbeans中编程Java了,但我不记得现在有这种行为。这没什么大不了的,但它肯定会使确定错误发生在哪里变得更加困难。我猜如果是netbeans,那就是netbeans,但我不确定为什么这些输出是在不同的线程上完成的。我认为原因可能是如果stdout线程陷入死锁,那么stderr线程将永远没有机会转储错误信息。