Hello everyone,
I'm going to show how you can debug yours Stealth scripts written in Python using
Pydev.
If you have any question or something is not clear please let me know.
This guide has also
been posted on the official stealth board, but I'm posting it here cause on their board the majority of user-base is russian.
Prerequisites- Any PC able to run the Eclipse IDE (this is the platform on the top of witch we'll run our debugger);
- The Python environment compatible with Stealth (for this tutorial I've used 2.7.x, but this has also been tested and proved to work with 3.2.x with some small changes). If you're reading this probably you know what I'm speaking of ;
- Pydev extension for Eclipse (this is where the sweet part of debug takes place ). At the moment of writing I'm using 2.4 version.
Preparation StepsInstalling EclipseDownload a version of Eclipse that suits your PC and install it (for this tutorial I've used the Eclipse IDE for Java EE Developers).
Installing PyDev on top of EclipseConfiguring PyDevAdd the Python interpreter- From the menu choose Window -> Preferences
View Screen Capture - Expand the PyDev tree (step 1), choose "Interpreter Python" (step 2), click on the "New" Button (step 3) and point Eclipse to your python.exe path (on my machine as you can see is "D:\Python27\python.exe", the screen has been taken after configuring so you see the result of it).
View Screen Capture
Add the PyDev perspective to EclipseAdd the remote debugger start and stop buttons- Be sure to be in PyDev perspective and click on a empty spot on you toolbar and from the menu choose "Customize Perspective...";
View Screen Capture - In the "Commands Group Availability" tab put the check on the PyDev Debug option;
View Screen Capture - Now you should see the remote debugging buttons in you toolbar:
View Screen Capture - Click on the green one and start the remote debugger (you can be sure that the debugger is started checking at the bottom of Eclipse interface in the Console log).
View Screen Capture
Make Stealth interact with PyDev remote debuggerNow that everything is set up in PyDev we need to address Stealth to interact with it.
Referencing the pysrc module inside Stealth installation- The first thing to make here is to find where the original pysrc module (bundled inside PyDev) has bee installed on our machine. The path changes depending on the installation. Typically it is in a sub folder of the Eclipse installation; in my machine it was ...\eclipse\plugins\org.python.pydev.debug_2.3.0.2011121518\pysrc on your machine should be something very similar.
- Once you've found it make a copy of the whole pysrc folder and place it wherever you like it. On my machine i putted it in the following path "D:\stealth\script\pydebug\pysrc" being "D:\stealth\" the path where my Stealth installation resides;
- Now go inside the newly created directory ("D:\stealth\script\pydebug\pysrc") and create a new empty file and name it "__init__.py".
Call the Remote Debugger from within you codeNow everything is ready and you only need to make your script aware of the remote debugger. To make this happen add this snippet in the header of your Python script (I'm going to comment it line by line later on) before launching it
from Stealth (not PyDev!):
REMOTE_DBG = True
if REMOTE_DBG:
sys.path.append('D:\\stealth\\script\\pydebug')
sys.path.append('D:\\stealth\\script\\pydebug\\pysrc') #this is only needed if you run Python >= 3.2.x
print str(sys.path)
import pysrc.pydevd as pydevd
pydevd.settrace('localhost', stdoutToServer=True, stderrToServer=True)
REMOTE_DBG = True
Here you define a Boolean variable to be able to switch the debugger as you like (see the if condition soon after after)
sys.path.append('D:\\stealth\\script\\pydebug')
sys.path.append('D:\\stealth\\script\\pydebug\\pysrc') #this is only needed if you run Python >= 3.2.x
Those two lines are really important. They are the lines that tells to Python where to look for the pysrc module that we have created in the step before. As you can see (the first of the two lines) is the parent directory of the one where we copied the pysrc module "D:\stealth\script\pydebug\pysrc" and the slash characters are escaped. To be sure that the path has been correctly added we also issue a print statement (you can never be sure...
). If you are using Python 3.2.x you also need to explicitly specify the pysrc folder; this is due to differences in the way that Python 3.x handle the imports.
import pysrc.pydevd as pydevd
Here you import the pydevd class from the pysrc module. If you have an error here you did not added the pysrc path correctly in the previous step.
pydevd.settrace('localhost', stdoutToServer=True, stderrToServer=True)
This line will try to connect Stealth to the remote debugger (be sure to have started it) so you can start debugging. If everything is set up correctly you'll be prompted for where to find the script to debug: point it to you current script folder, swith to the Debug Perspective and you are done.
Known IssuesPyDev, will only promt you one time asking where to look for debug source and then will save the location and use it for following debug sessions. This is good if you are debugging the same script, but if you want to debug another script you'll have to make the following steps:
Credits and referencesReferencesThis guide has been inspired from the following pages:
CreditsThank to
Alex (from the Stealth comunity) that
in this post gave me the initial tips on how to start.
Thanks to
Crome969 that pointed out troubles with Python 3.2.x