Редактировать, 2015: Прочитайте главы 1 и 2 моей магистерской диссертации, Сочетая обратную отладку и живое программирование для визуального мышления в компьютерном программировании , он отвечает на вопрос в подробно.
Отладчик Python, Pdb, позволяет запускать произвольный код во время паузы (как в точке останова). Например, предположим, что вы отлаживаете и сделали паузу в следующей строке в вашей программе, где переменная не была объявлена в самой программе:
print (x)
так, чтобы продвижение вперед (то есть выполнение этой строки) привело бы к:
NameError: name 'x' is not defined
Вы можете определить эту переменную в отладчике и продолжить выполнение программы с ней:
(Pdb) 'x' in locals()
False
(Pdb) x = 1
(Pdb) 'x' in locals()
True
Если вы имели в виду, что изменение не должно предоставляться на консоли отладчика, а что вы хотите изменить исходный код в каком-либо редакторе, то пусть отладчик каким-то образом автоматически обновляет состояние живой программы, чтобы выполнение программы отражает это изменение, которое называется «живое программирование». (Не путать с «живым кодированием», которое представляет собой живое исполнение кодирования - см. TOPLAP - хотя есть некоторая путаница.) Был интерес к исследованию живого программирования (и живого кодирования) в последние 2 или 3 года. Это очень сложная проблема, и есть много разных подходов. Вы можете посмотреть выступление Брета Виктора Изобретая по принципу - некоторые примеры этого. Обратите внимание, что это только прототипы, чтобы проиллюстрировать идею. Горячая замена кода, чтобы дерево отображалось по-другому в следующем цикле некоторой функции draw (), или чтобы игровой персонаж реагировал по-другому в следующий раз (или чтобы музыка или визуальные эффекты были изменены во время сеанса кодирования в реальном времени) , это не так сложно, некоторые языки и системы обслуживают это явно. Однако состояние программы не обязательно является истинным отражением кода (как и в приведенном выше примере с Pdb) - если, например, игровой персонаж может получить доступ к области, основанной на некоторой способности, такой как прыжок, и затем код поменяется местами, он может никогда больше не получить доступ к этой области в игре , если в игру играть с самого начала, Решить распространение изменений для общего программирования сложно - вы можете видеть, что его пример поиска перезапускает код с самого начала при каждом изменении.
Истинное обратное выполнение также является сложной задачей. Существует ряд коммерческих проектов, но почти все они только записывают данные трассировки для последующего просмотра, которые называются всезнающей отладкой (но их часто называют отладчиками с обратным, обратным временем, двунаправленным движением или перемещением во времени, а также много путаницы). С точки зрения проектов с открытым исходным кодом, отладчик GNU, gdb, имеет два режима: один - запись процесса и воспроизведение , который также записывает только программу для последующего просмотра, другой - true обратная отладка , которая позволяет выполнить реверс в живой программе. Это очень медленно, поскольку он отменяет одну машинную инструкцию за раз. Расширенный прототип python-отладчика, epdb, также обеспечивает реальное изменение в живой программе и намного быстрее, поскольку использует механизм моментальных снимков / контрольных точек и воспроизведения. Вот тезис , а вот программа и код .