Форум сайта python.su
33
erebus
Не из самой программы, я имел в виду: приостановить программу->изменить код->продолжить выполнение.
Офлайн
1
Singularity
хочешь дебагерименно
Отредактировано erebus (Янв. 8, 2014 17:55:11)
Офлайн
32
erebusбайткод java вроде компиллируется в машинный байт-код уже на месте запуска.
Почему тогда говорят что исходный код на Python интерпритируеться а на Java - компилируеться?
erebusЭто может быть не возможно т.к. программа может быть кардинально изменена - тогда не понято что делать при продолжении или бессмысленно.
Ибо продолжить выполнение нужно именно с места остановки, не теряя имеющиеся данные, но уже измененную программу.
erebusНекоторые задачи можно решить так:
не теряя имеющиеся данные
Офлайн
253
erebusИменно это обычно и делается при работе практически из любой среды отладки. Для этого достаточно просто в отладчике выполнить питон код который изменит нужные вам определения. (Исходный текст программы можно менять, а можно и не менять)
приостановить программу->изменить код->продолжить выполнение.
Офлайн
33
o7412369815963
байткод java вроде компиллируется в машинный байт-код уже на месте запуска.
Офлайн
20
Теоретически такое возможно, но нужно хорошо знать внутренности интерпретатора, что бы не напортачить (и всё равно напортачишь). Из чистого Python не получится конечно, придётся использовать API CPython. В частности придётся править фреймы после перекомпиляции, а стеков может быть несколько: системные потоки, greenlet-ы, yield-ы. Ну и нужно понимать, как искать новую точку остановки после перекомпиляции, например при 100% изменении кода, это сделать будет невозможно.
Если точка остановки не произвольная, а предопределённая, то может получиться проще: сериализация, “перезагрузка” и всё что нужно, десериализация.
..bw
Офлайн
75
erebusПодробный ман http://habrahabr.ru/post/104086
именно
import pdb; pdb.set_trace()
Офлайн
1
Всем огромное спасибо за помощь. Ответ на вопрос в общих чертах ясен: изменять код программы во время её исполнения теоретически можно, но без особой нужды не стоит.
Офлайн
20
Посмотрите пакеты `byteplay`, `astoptimizer`, `withhacks` и пр. Может подчерпнёте для себя что-то полезное.
..bw
Офлайн
1
bw
Спасибо
Офлайн