Можно ли отладить метод, вызываемый из интерактивного окна в PTVS?

Когда я разрабатываю на Python, мне часто нужно отладить определенный метод, и в этом случае имеет смысл вызывать метод из интерактивной консоли или отлаживать интерактивную консоль. Однако когда метод вызывается из интерактивных окон в PTVS, он не останавливается в точках останова в указанном методе.

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

Я использую PTVS 2.0 RC в Visual Studio 2013 Ultimate.


person Tim Rae    schedule 25.11.2013    source источник


Ответы (1)


При использовании обычного (не отладочного) интерактивного окна Python вы можете фактически подключить VS к запущенному процессу python.exe, используя Отладка -> Присоединить к процессу. Как только это будет сделано, если интерактивное окно сделает что-то, например. попадет в точку останова, отладчик нажмет на эту точку останова.

Хитрость заключается в загрузке кода из файла таким образом, чтобы разрешались точки останова. В частности, команда $load REPL не будет работать, потому что она просто читает файл и оценивает его в REPL построчно, не сохраняя исходный контекст файла. Что вам нужно, так это загрузить свой скрипт с помощью средств Python, например. import или open+exec.

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

person Pavel Minaev    schedule 25.11.2013
comment
Ах, я вижу, это хороший трюк, спасибо. Жаль, что REPL перестает отвечать на запросы. Было бы очень хорошо, если бы можно было сделать следующее: Остановившись в точке останова в method a, вызвать method b из интерактивного окна отладки и остановить отладчик в любой точке останова в method b, а затем вызовите method c из интерактивного окна отладки в контексте method b. Вот как работает отладчик в Matlab, и я привык использовать такие вложенные точки останова при разработке. - person Tim Rae; 26.11.2013
comment
Я вижу, что после присоединения обычного интерактивного окна к python.exe и вызова method a остановка в точке останова приводит к тому, что REPL перестает отвечать на запросы, но затем мы можем переключиться на интерактивное окно отладки и поиграть с локальными переменными, что очень здорово. - person Tim Rae; 26.11.2013