2011-07-11 7 views
0

Netbeans 7.0を使用してレール開発を始めようとしており、最新のRubyプラグインを使用しています。記録のために、私はデフォルトの1.8.7インタプリタをローカル1.9.2ルビインストールを指すように切り替えましたが、この問題は両方のインタプリタで発生するようです。Netbeansコンソールでの非順次Rubyエラー出力

ruby​​が自分のコードでエラーに遭遇すると、エラー出力はコンソール出力のランダムな点に表示されます。私はそれが発生したとしてエラーを印刷することを期待していたが、エラーストリームと通常の出力ストリームが別のスレッドで更新されているように見えます。ただ、このコードで...例を与える:

(0..10).each { |o| puts "Normal output" } 
invalidSytax! 

私は、2行目に構文エラーをトリガしていますが、エラー出力は変えることができます。たとえば、次のように

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 

これを引き起こしている可能性がどのような任意のアイデア?私は、私のコードには問題はないと思うかもしれないが、本当に私のコンソールストリームの始めに出力されているエラーメッセージがある、大きなプロジェクトでは大きな問題であることが分かりました。

答えて

0

これはNetBeansの内部処理がSTDOUTとSTDERRであるため、出力が確定的ではないため、すでに疑わしいように2つの別々のスレッドで処理されていると思います。だからあなたはここで競争状態の目撃者である可能性が高いです。

これはRubyを使用しているかどうかに関係なく発生します。 JavaプロジェクトのJUnitテストを実行すると、同じことが起こります.STDERRとSTDOUTの出力は不確定に混じり合います。

なぜこれが問題であると考えているのですか?出力が混乱しない限り(これは、両方のスレッドが同時にNetBeansのコンソールに書き込もうとしたときに起こり、適切なロック機構が存在しない場合に起こります)、なぜこれが重要かはわかりません。

Webアプリケーションのログファイルでも同じ原則が適用されます。多くのクライアント接続が同時に情報をファイルに記録しようとすると、メッセージが表示される順序を予測することができなくなります。私の考えでは、マルチスレッドアプリケーション固有の動作です。

+0

Hmm。私はこれが共通の問題であることを知らなかった。私は長い間ネットビーンでJavaをプログラミングしていませんが、この動作の存在を覚えていません。あまりにも大きな問題ではありませんが、エラーがどこで起こっているのかを確かに判断することができます。私はnetbeansそれはnetbeansだと思うが、私はなぜこれらの出力が別のスレッドで行われているのか分からない。 – donalbain

+0

私は、stdoutスレッドがデッドロックになった場合、stderrスレッドにエラー情報をダンプする機会が与えられないような理由が考えられます。 – emboss

関連する問題