Отладка скриптового языка, такого как ruby - PullRequest
6 голосов
/ 07 октября 2009

Я в основном из мира программирования на языке Си, теперь углубляюсь в мир языков сценариев, таких как Ruby и Python.

Мне интересно, как делать отладку. В настоящее время я выполняю следующие шаги:

  • Я заканчиваю большой скрипт,
  • Комментируйте все, кроме части I хочу проверить
  • Выполнить скрипт

Хотя это работает, я не могу отлаживать, как, например, в среде VC ++ или что-то в этом роде.

У меня вопрос, есть ли лучший способ отладки?

Примечание: я думаю, что это может быть повторный вопрос, если да, пожалуйста, укажите мне на ответ.

Ответы [ 11 ]

10 голосов
/ 07 октября 2009

Ваша последовательность кажется мне совершенно обратной. Вот как я это делаю:

  1. Я пишу тест на функциональность, которую хочу.
  2. Я начинаю писать скрипт, выполнять биты и проверять результаты теста.
  3. Я проверяю, что я сделал для документирования и публикации.

В частности, я выполняю до Я завершаю. Уже слишком поздно.

Конечно, есть отладчики, но с хорошими тестами и хорошим дизайном мне почти никогда не нужен был.

6 голосов
/ 07 октября 2009

Вот скринкаст по отладке ruby ​​с помощью ruby-debug.

4 голосов
/ 07 октября 2009

Похоже, проблема в том, что ваша среда (Visual Studio) не поддерживает эти языки, а не то, что эти языки вообще не поддерживают отладчики.

Perl, Python и Ruby имеют полнофункциональные отладчики; Вы можете найти и другие IDE, которые вам тоже помогут. Для Ruby есть RubyMine ; для Perl есть Komodo . И это только с моей головы.

3 голосов
/ 07 октября 2009

Хорошее, приятное введение в отладчик Python здесь

2 голосов
/ 07 октября 2009

У меня вопрос, есть ли лучший способ отладки? "

Да.

Ваш подход: «1. Я выполняю большой сценарий, 2. Комментируйте все, кроме части, которую я хочу проверить, 3. Выполните сценарий», на самом деле не лучший способ написать любое программное обеспечение на любом языке (извините, но это правда.)

Не пишите ничего большого. Когда-либо.

Сделай это.

  1. Разложите вашу проблему на классы объектов.

  2. Для каждого класса напишите класс по

    2a. Обведите класс, сфокусируйтесь на внешнем интерфейсе, а не на деталях реализации.

    2b. Напишите тесты, чтобы доказать, что интерфейс работает.

    2в. Запустите тесты. Они потерпят неудачу, так как вы только обрисовали класс.

    2d. Исправьте класс, пока он не пройдет тест.

    2e. В какой-то момент вы поймете, что дизайн вашего класса не оптимален. Перефразируйте ваш дизайн, гарантируя, что ваши тесты все еще проходят.

  3. Теперь напишите свой последний сценарий. Это должно быть коротким. Все классы уже проверены.

    3a. Изложить сценарий. Действительно, обычно вы можете написать сценарий.

    3b. Напишите несколько тестовых примеров, которые доказывают, что скрипт работает.

    3c. Проведите тесты. Они могут пройти. Вы сделали.

    3d. Если тесты не пройдены, исправьте их, пока они не пройдут.

Пишите много маленьких вещей. В конечном итоге это работает намного лучше, когда вы пишете большую вещь и комментируете ее части.

2 голосов
/ 07 октября 2009

Языки сценариев не имеют различий по сравнению с другими языками в том смысле, что вам все еще приходится разбивать свои проблемы на управляемые части, то есть функции. Поэтому вместо того, чтобы тестировать весь сценарий после завершения всего сценария, я предпочитаю тестировать эти небольшие функции перед их интеграцией. TDD всегда помогает.

2 голосов
/ 07 октября 2009

Если вы работаете с Python, вы можете найти список инструментов отладки здесь , к которым я просто хочу добавить Eclipse с расширением Pydev, что делает работу с точками останова и т. д. также очень простой.

1 голос
/ 07 октября 2009

Здесь много полезных советов, я рекомендую ознакомиться с лучшими практиками:

http://github.com/edgecase/ruby_koans

http://blog.rubybestpractices.com/

http://on -ruby.blogspot.com / 2009/01 / рубинового лучшие практики мини-интервью-2.html

(и прочитайте книгу Грега Брауна, она великолепна)


Вы говорите о больших сценариях. Большая часть моего рабочего процесса работает над логикой в ​​irb или оболочке python, а затем собирает их в каскад небольших, сфокусированных на одной задаче методов с соответствующими тестами (не 100% охват, больше внимания на краевых и угловых случаях). 1017 *

http://binstock.blogspot.com/2008/04/perfecting-oos-small-classes-and-short.html

0 голосов
/ 07 октября 2009

Метод отладки, который вы описали, идеально подходит для статического языка, такого как C ++, но, учитывая, что язык настолько отличается, методы кодирования также отличаются. Одна из больших и очень важных вещей в динамическом языке, таком как Python или Ruby, - это интерактивный верхний уровень (то, что вы получите, набрав, скажем, python в командной строке). Это означает, что запуск части вашей программы очень прост.

Даже если вы написали большую программу перед тестированием (что является плохой идеей), мы надеемся, что она разделена на множество функций. Итак, откройте интерактивный верхний уровень, выполните import thing (для того, что бы ни случилось thing), и тогда вы можете легко начать тестировать свои функции по очереди, просто вызывая их на верхнем уровне.

Конечно, для более зрелого проекта вы, вероятно, захотите написать реальный набор тестов, и у большинства языков есть способ сделать это (в Python это doctest и nose, не знаю о других языках). Однако сначала, когда вы пишете что-то не совсем формальное, просто запомните несколько простых правил отладки динамических языков:

  • Начните с малого. Не пишите большие программы и не проверяйте их. Проверяйте каждую функцию по мере ее написания, хотя бы курсивно.
  • Используйте верхний уровень. Выполнение небольших фрагментов кода на языке, подобном Python, чрезвычайно легкое: запустите верхний уровень и запустите его. Сравните с написанием полной программы и ее компиляцией, скажем, на C ++. Используйте тот факт, что вы можете быстро изменить правильность любой функции.
  • Отладчики удобны. Но часто, как и 1017 * заявления. Если вы используете только одну функцию, отладка с помощью операторов print не так уж неудобна, а также освобождает вас от перетаскивания по IDE.
0 голосов
/ 07 октября 2009

Вы можете отлаживать свои скрипты Python, используя включенный модуль pdb. Если вам нужен визуальный отладчик, вы можете скачать winpdb - не откладывайте этот префикс "win", winpdb кроссплатформенный.

...