Модификация кода во время сеанса отладки. - PullRequest
2 голосов
/ 29 июля 2011

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

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

Ответы [ 4 ]

2 голосов
/ 29 июля 2011

Я полагаю, что Горячая замена кода в Eclipse - это то, что вы имели в виду в проблеме:

Идея состоит в том, что вы можете запустить сеанс отладки на данной рабочей среде иизмените Java-файл в вашей рабочей среде разработки, и отладчик заменит код в принимающей виртуальной машине во время ее работы.Перезапуск не требуется, поэтому ссылка на «горячий».

Но есть ограничения:

HCR работает только тогда, когда сигнатура класса не изменяется;Например, вы не можете удалять или добавлять поля в существующие классы.Однако HCR можно использовать для изменения тела метода.

2 голосов
/ 01 февраля 2013

Отладчик предоставляет концепцию Evaluation Point , которая позволяет пользователю «исправлять свой код на лету», «исправлять его» или проверять , что если сценарий без перекомпиляции.

По сути, пользователь устанавливает точку оценки в какой-то строке и пишет фрагмент кода на C / C ++ или Fortran, который он хочет вместо этого выполнить. Это могут быть простые printf, goto, набор тестов if - then - else, несколько циклов for и т. Д. ... Это действительно мощно и требует много времени.

Что касается , это очень желательная функция, но я не уверен, что она уже существует.

1 голос
/ 29 июля 2011

http://msdn.microsoft.com/en-us/library/bcew296c%28v=vs.80%29.aspx

Ссылка предназначена для VS 2005, но также применима к 2008 и 2010 гг.

0 голосов
/ 10 ноября 2014

Редактировать, 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, также обеспечивает реальное изменение в живой программе и намного быстрее, поскольку использует механизм моментальных снимков / контрольных точек и воспроизведения. Вот тезис , а вот программа и код .

...