Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there "Edit and Continue" in PyCharm? Reload code into running program like in Eclipse / PyDev?

Tags:

python

pycharm

Hi all Python developers!

In Eclipse with PyDev it is possible to edit a Python file while debugging. On save, the PyDev debugger will reload the updated code into the running program and uses my new code. How can I do the same thing in JetBrains PyCharm (using Community Edition)?

Eclipse / PyDev writes an output like this when I do that:

pydev debugger: Start reloading module: "MyWidget" ...  pydev debugger: Updated function code: <function close at 0x055F4E70> pydev debugger: reload finished 

I searched settings and web and could not find any hint. Very glad about any idea. Thx.

Edit: I found out in Eclipse/PyDev one has to be in debug mode to be able to use this feature. I tested in PyCharm, but there was no reload done.

like image 817
this.myself Avatar asked Apr 28 '14 06:04

this.myself


People also ask

Can you step through code in PyCharm?

Step through the program Stepping is the process of controlling step-by-step execution of the program. PyCharm provides a set of stepping actions, which are used depending on your strategy (for example, whether you need to go directly to the next line or enter the methods invoked on your way there).

What does Pydev debugger do?

The Python debugger is an interactive source code debugger for Python programs. It can set conditional breakpoints and single stepping at the source line level. It also supports inspection of stack frames, source code listing, and evaluation of arbitrary Python code in any stack frame's context.

How do I run a variable in PyCharm?

Right-click on the file and click Run file in console. Everytime you run it, the variables will show in the console until you click the stop button.


Video Answer


1 Answers

PyCharm does not support edit and continue in either the community edition or the professional edition but here is a workaround that I have found while debugging.

Since you can run arbitrary code in the console and/or the expression evaluator, in a lot of cases, you can execute changes to the code without having to restart the application. This isn't exactly like edit-and-continue (which is a feature I really like in Visual Studio and should be part of Pycharm) but it goes a long way towards avoiding having to restart the program from scratch after a change to see if the new code works as expected.

Let me illustrate a couple of the techniques I use:

Let's say you have the following code (with a couple of typos/bugs to illustrate the techniques)

test_value = [10,9,8,7,6,55,4,3,2,1]  for i in range(0,10):     if test_value[i] == i:         print "found the value: " + i 

If you run this code, first it errors because you can't print string plus integer but also I wanted to match on 5, not have 55 in the array. So here we go.

Set a break point on the for statement like this and run the code in the debugger.

enter image description here

When it breaks into the debugger, you realize that it should be 5 not 55. Rather than restarting, you can change line 1 to test_value = [10,9,8,7,6,5,4,3,2,1] then select the line, right click and choose Execute Line in Console... which will change the value of test_value to be the array with a 5. Now, the if statement on line 4 becomes true on the value 5. This will then trigger the syntax error on line 5.

Now if you want to make sure you have the syntax correct you can change line 5 to print "found the value: " + str(i), select the line and choose Evaluate Expression... from the right button context menu. When you click Evaluate, the result will show up either in the dialog (or in this case, since it is a print command, in the console)

enter image description here

Now that I've fixed these two issues, I can run the code successfully on the second pass rather than possibly multiple passes it might have taken if I didn't use these techniques. These techniques really pay off if you find a bug deep in the code where it took a while to set up.

Obviously, this is a very contrived example, but hopefully this shows how you can use both Evaluate Expression... and Execute Line in Console... to your advantage while debugging without having to restart your application each time you find a bug in the code.

Also, if you happen to be using Django, PyCharm (professional) will re-launch the server if you make changes to the code. So if you are looking at your web page and notice a problem, you can make a change to the code and switch back to the web page and as you do, either the running application or the debugged application will re-launch and the new code will be running when you refresh the page. Again, not really edit-and-continue but a pretty rapid way to make a change and test.

like image 72
andrewmo Avatar answered Sep 22 '22 04:09

andrewmo