Написание отладчика Iron Python - PullRequest
9 голосов
/ 22 марта 2010

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

Я немного охотился в Интернете и нашел несколько хороших ресурсов по написанию управляемых отладчиков (в том числе отличный блог отладки .Net Майка Сталла и MSDN.документация по CLR Debugging API ) - я понимаю, что IronPython - это по сути IL, но кроме того, я немного растерялся, как начать, в частности:

  • Существуют ли существенные различия между отладкой динамического языка (например, IronPython) и статического (например, C #)?
  • Нужно ли выполнять мой сценарий особым образом, чтобы IronPython выводил подходящую отладочную информацию?
  • Отладка скрипта, работающего внутри текущего процесса, может вызвать взаимные блокировки или IronPyчем выполнить мой сценарий в дочернем процессе?
  • Лучше ли мне сначала изучить, как создать простой отладчик C #, чтобы получить общее представление?

(мне это не интереснов аспекте GUI создания отладчика на данный момент - у меня уже есть довольно хорошее представление о том, как это может работать)

Ответы [ 2 ]

9 голосов
/ 22 марта 2010

Еще несколько ссылок начали прояснять ситуацию - есть два способа добавления поддержки отладчика, которые я видел:

Отладка IronPython как приложения CLR

Первыйиспользовать тот факт, что IronPython испускает IL и отлаживать его, используя стандартные методы, используемые для отладки приложений .Net.Гарри Пирсон здесь написал серию постов в блоге о разработке ipydbg - отладчика Python, использующего этот подход.

  • См. этот пост для обзора того, где раскрывается функциональность отладки .Net, и различных оберток вокруг нее (mdbg)
  • Недостаток этого подхода состоит в том, что эта форма отладки полностью блокирует отлаживаемое приложение, и поэтому выдолжны выполнить ваши сценарии во втором приложении.

Использование Microsoft.Scripting.Debugging

Из-за этого ограничения была создана библиотека Microsoft.Scripting.Debugging, которая гораздо больше подходит длядля приложений, которые запускают IronPython «встроенным» (т.е. в том же процессе).

Здесь есть введение здесь и более обширное сообщение в блоге о том, как оно использовало здесь - по сути, оно состоит из функции обратного вызова, которая выполняется каждый раз, когда что-либопроисходит «интересное» (каждый раз, когда мы входим в функцию, каждый раз, когда мы возвращаемся из функции и каждый раз, когда выполняется строка).Выполнение скрипта блокируется во время работы функции обратного вызова, которая позволяет вам «сломать» скрипт.

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

6 голосов
/ 22 марта 2010

Я не эксперт в IronPython, но у меня есть некоторый опыт отладки управляемых приложений с помощью WinDbg.Я кратко посмотрел, как выглядят приложения IronPython в отладчике.Из-за динамической природы Python во время выполнения генерируется много кода.Это делает отладку приложения IronPython несколько более сложной, чем, скажем, приложение C #, потому что у вас есть, так сказать, дополнительный уровень генерации кода.

У Гарри Пирсона, который раньше активно участвовал в разработке языков Iron, есть серия постов в блоге о написании отладчика IronPython , в которой много деталей.

...