Запись отладчика Iron Python

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

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

  • Есть ли какие-либо существенные различия между отладкой динамического языка (такие как IronPython) к статическому (такие как C#)?
  • Я должен выполнить свой сценарий специальным способом заставить IronPython производить подходящую отладочную информацию?
  • Действительно ли отладка является сценарием, работающим в текущем процессе, собирающемся вызвать мертвые блокировки, или IronPython выполняет мой сценарий в дочернем процессе?
  • Действительно ли я - более обеспеченное изучение, как произвести простой отладчик C# сначала, чтобы в общих чертах понять?

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

9
задан Justin 22 March 2010 в 15:38
поделиться

2 ответа

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

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

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

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

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

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

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

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

9
ответ дан 4 December 2019 в 13:47
поделиться

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

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

6
ответ дан 4 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: