Непоследовательный вывод ошибок Ruby в консоли Netbeans - PullRequest
0 голосов
/ 11 июля 2011

Я пытаюсь начать использовать Netbeans 7.0 для разработки рельсов и использую последний плагин 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

Есть идеи, что может быть причиной этого? Я мог видеть, что это большая проблема в большом проекте, когда я мог подумать, что у моего кода нет проблем, но на самом деле в начале моего потока консоли выводится сообщение об ошибке.

1 Ответ

0 голосов
/ 11 июля 2011

Это из-за внутренней обработки NetBeans STDOUT и STDERR, вывод не является детерминированным, я предполагаю, что они оба обрабатываются в двух отдельных потоках, как вы уже подозревали.Таким образом, вы, скорее всего, являетесь свидетелем состояния гонки здесь.

Но это происходит независимо от использования Ruby или нет - например, когда я запускаю тесты JUnit для моих проектов Java, происходит то же самое, выходные данные STDERR и STDOUT смешиваются неопределенно.

Почему именно вы считаете это проблемой?До тех пор, пока выходные данные не будут смешаны с бредом (это произойдет, если оба потока попытаются выполнить запись в консоль NetBeans одновременно и не будет установлен надлежащий механизм блокировки), я не понимаю, почему это будет иметь значение.

Тот же принцип можно наблюдать с файлами журналов веб-приложений.Если множество клиентских подключений одновременно попытается записать свою информацию в файл, вы не сможете предсказать порядок, в котором будут появляться сообщения, - на мой взгляд, такое поведение присуще многопоточным приложениям.

...