Archive:Debug Python Scripts with Eclipse: Difference between revisions
>NedBot m (moved How-to-TEMP:Debug Python Scripts with Eclipse to HOW-TO:Debug Python Scripts with Eclipse: Bot: Moved page) |
>Cmeng (Clean up steps and added info to indicate the procedures also applicable to Aptana Studio 3) |
||
Line 1: | Line 1: | ||
Here is a method you can use in order to use the Eclipse (multi-platforms) remote debugger with you Python scripts/plugin. | Here is a method you can use in order to use the Eclipse (multi-platforms) remote debugger with you Python scripts/plugin. | ||
Note: | Note: Follow this link [[HOW-TO debug Python Scripts|Debugging Python Scripts on Linux with WinPDB]] for more information if you prefer to use WinPDB instead. | ||
== Prerequisite == | == Prerequisite == | ||
* Any platform able to run [http://www.eclipse.org/downloads/ Eclipse IDE] (Windows 32bit, Mac Carbon 32bit-64bit, Mac Cocoa 32bit-64bit, Linux 32bit-64bit): it is the platform from where you will run the debugger IDE | * Any platform able to run [http://www.eclipse.org/downloads/ Eclipse IDE] (Windows 32bit-64bit, Mac Carbon 32bit-64bit, Mac Cocoa 32bit-64bit, Linux 32bit-64bit): it is the platform from where you will run the debugger IDE | ||
* Pyhton interpreter 2.4 (same version as XBMC) install on the machine running Eclipse | * Pyhton interpreter 2.4 (use the same version as XBMC or version <= 2.7 ) install on the machine running Eclipse | ||
* Any platform running XBMC (Xbox, Linux, MACOSX, Windows): it is the platform running Python scripts/plugin connecting with the remote debugger. | * Any platform running XBMC (Xbox, Linux, MACOSX, Windows): it is the platform running Python scripts/plugin connecting with the remote debugger. | ||
XBMC installed on Ubuntu (should work just fine on Windows and Mac too) | :XBMC installed on Ubuntu (should work just fine on Windows and Mac too) | ||
* [http://pydev.org/ Pydev ] plugin for Eclipse IDE: Pydev is a Python IDE for Eclipse, which may be used in Python, Jython and IronPython development. | * [http://pydev.org/ Pydev] plugin for Eclipse IDE: Pydev is a Python IDE for Eclipse, which may be used in Python, Jython and IronPython development. | ||
* Note: The information provided herein is also applicable to user with [http://www.aptana.com/ Aptana Studio 3] installation which come pre-installed with pydev. For this case, you can skip to [[#Configure Pydev and Eclipse|Configure Pydev and Eclipse]] after the Aptana Studio 3 installation. | |||
Line 23: | Line 24: | ||
=== Install Pydev in Eclipse === | === Install Pydev in Eclipse === | ||
* In Eclipse go in: Help -> Install New Software... | * In Eclipse go in: ''Help'' -> ''Install New Software...'' | ||
* | * Click on the ''Add'' button and add Pydev website as a source: http://pydev.org/updates | ||
* You will see the window below: | * You will see the window below: | ||
[[File:EclipsePydevUpdate.png]] | [[File:EclipsePydevUpdate.png]] | ||
* Check PyDev box and follow the steps in order to install PyDev | * Check ''PyDev'' box and follow the steps in order to install PyDev | ||
Note: in our example PyDev 1.5.5 | Note: in our example PyDev 1.5.5 | ||
Line 36: | Line 37: | ||
==== Add Pyhton Interpreter Path ==== | ==== Add Pyhton Interpreter Path ==== | ||
* Go in Window -> Preferences | * Go in ''Window'' -> ''Preferences'' | ||
* Pydev then Interpreter Python | * ''Pydev'' then ''Interpreter - Python'' | ||
* | * Click on button ''New...'' | ||
[[File:EclipsePydevPref.png]] | * In the new prompt, enter the ''Interpreter Name: Python'', and Browse for your Python Interpreter 2.4 ''python.exe'' file and select it. After that you should see something like this: | ||
[[File:EclipsePydevPref.png|none]] | |||
This will help in order to have Python code completion (except for XBMC modules) | This will help in order to have Python code completion (except for XBMC modules) | ||
==== Add Pydev view to Eclipse ==== | ==== Add Pydev view to Eclipse ==== | ||
* On the top right corner | * On the top right corner click on the View button on select ''Others'' | ||
[[File:EclipsePydevViewMenu.png]] | [[File:EclipsePydevViewMenu.png]] | ||
* Select Pydev then OK, a PyDev View Button should be now available on the top right corner | * Select Pydev then OK, a PyDev View Button should be now available on the top right corner | ||
Line 52: | Line 54: | ||
==== Add Pydev Start/Stop debug server buttons ==== | ==== Add Pydev Start/Stop debug server buttons ==== | ||
* Right | * Right click on the toolbar empty area | ||
* Select | * Select ''Customize perspective...'', a window ''Customize Perspective - PyDev'' will open | ||
* Select Command Groups Availability | * Select ''Command Groups Availability'' Tab | ||
* Check Pydev Debug box and OK | * Check ''Pydev Debug'' box and OK | ||
* You should see 2 new buttons in your toolbar | * You should see 2 new buttons in your toolbar: | ||
[[File:EclipsePydevDebugSrvButtons.png]] | [[File:EclipsePydevDebugSrvButtons.png]] | ||
Line 62: | Line 64: | ||
==== Setting the remote debugger port (optional) ==== | ==== Setting the remote debugger port (optional) ==== | ||
If you do not want to use the default port (usually 5678) you can set it up: | If you do not want to use the default port (usually 5678) you can set it up: | ||
* Go | * Go to ''Window'' -> ''Preferences'' | ||
* Pydev then Debug | * ''Pydev'' then ''Debug'' you can define here the port and the timeout you want | ||
Line 71: | Line 73: | ||
=== Create a new PyDev Project === | === Create a new PyDev Project === | ||
Most of the time when you | Most of the time when you are doing development, likely that you are running XBMC and Eclipse on the same platform (the installed debugger can also work with a remote XBMC too). | ||
Let say you already have a script installed in XBMC script folder | Let say you already have a script installed in XBMC script folder | ||
In order to create a new PyDev project: | In order to create a new PyDev project: | ||
* File -> New -> PyDev Project | * ''File'' -> ''Switch Workspace'' -> ''Other...'' | ||
* ''Browse'' to the parent directory of your script module i.e. ''C:\XBMC\myscript'' in this example, select and OK | |||
* File -> New -> Others and Select Pydev then PyDev Project | You may wish to select the directory ''C:XBMC'' if ''myscript'' contains also other similar sub-directories like ''myscript'' | ||
* | * ''File'' -> ''New'' -> ''PyDev Project'' | ||
: OR select below in case ''PyDev Project'' is not displayed | |||
* Uncheck Use Default | * ''File'' -> ''New'' -> ''Others'' and Select ''Pydev'' then ''PyDev Project''; Click ''Next'' | ||
* Browse | * Enter the name of your project | ||
<pre>C:\XBMC\scripts\myscript</pre> with myscript being a directory containing the Default.py script | * Uncheck option ''Use Default'' | ||
* Set Python as Project Type | * Browse to the directory of your script where XBMC is installed for example: | ||
* Select 2.4 (XBMC Python version) for the grammar | <pre>C:\XBMC\scripts\myscript</pre> with myscript being a sub-directory containing the Default.py script. | ||
* | * Set ''Python' as Project Type | ||
* | * Select ''2.4 (XBMC Python version)'' for the grammar | ||
* Select ''Don't configure PYTHONPATH (to be done manually later on)'' | |||
* Click on ''Finish'' button | |||
=== Set the Python Path === | === Set the Python Path === | ||
* Right | * Right click on your new project and select ''Properties'' | ||
* Select PyDev - PYTHONPATH and | * Select ''PyDev - PYTHONPATH'' and click on ''Add source folder'' | ||
* Select the source directory of your script (or plugin), myscript in our example | * Select the source directory of your script (or plugin), myscript in our example | ||
Your source code is now | |||
=== Import File System === | |||
Assuming you want to add in all the directories under C:\XBMC | |||
* Right click on your new project and select ''Import...'' | |||
* Select ''General'' and click on ''File System''; then ''Next'' | |||
* Browse to the source directory of your script (or plugin) e.g. C:\XBMC | |||
* Check all the directory and files to be added | |||
* Select ''Into folder: XBMC" | |||
* Select ''Options|<<Advanced|Create links in workspace [Create virtual folders]'' | |||
* Click on ''Finish'' button | |||
Your source code is now recognized by Eclipse and you will have access to neat functionality such as code completion, link between source files, etc. | |||
Line 107: | Line 121: | ||
The pysrc code that came with Eclipse-pydev does not support XBMC paths (special://... or Q:/...) and the module would not find them making it impossible to insert breakpoints in such files. | The pysrc code that came with Eclipse-pydev does not support XBMC paths (special://... or Q:/...) and the module would not find them making it impossible to insert breakpoints in such files. | ||
In order to add the support of XBMC paths, you will need to do a simple modification to the file pydevd_file_utils.py consisting on adding a line to each procedure that had a filename parameter (4 procedures in total). | In order to add the support of XBMC paths, you will need to do a simple modification to the file ''pydevd_file_utils.py'' consisting on adding a line to each procedure that had a filename parameter (4 procedures in total). | ||
Add a line like | Add a line like | ||
Line 116: | Line 130: | ||
... | ... | ||
of course you need | The other three procedures are: | ||
* def _NormFile(filename): | |||
* def NormFileToServer(filename): | |||
* def NormFileToClient(filename): | |||
of course you need the import directive at the top of the file: | |||
import xbmc | import xbmc | ||
Line 124: | Line 143: | ||
==== Choose how XBMC will refer to Pydev debugging module ==== | ==== Choose how XBMC will refer to Pydev debugging module ==== | ||
You have 3 options as below: | |||
* Option 1 - Refer from our python script | * Option 1 - Refer from our python script directly the directory where pysrc is installed | ||
* Option 2 - Copy pysrc in our script directory and refer it from our script | * Option 2 - Copy pysrc in our script directory and refer it from our script | ||
* Option 3 - Copy pysrc in XBMC Python install | * Option 3 - Copy pysrc in XBMC Python install | ||
I am only going to show you the | I am only going to show you the steps for ''Option 3'': | ||
==== Copy pysrc in XBMC Python install ==== | ==== Copy pysrc in XBMC Python install ==== | ||
Line 137: | Line 156: | ||
=== Add to your python script the code for remote debug === | === Add to your python script the code for remote debug === | ||
At the beginning of you Python script/plugin ( | At the beginning of you Python script/plugin (usually Default.py) add the following code: | ||
<pre> | <pre> | ||
REMOTE_DBG = True | REMOTE_DBG = True | ||
Line 161: | Line 180: | ||
* Use REMOTE_DBG in order to activate or not the remote debugging | * Use REMOTE_DBG in order to activate or not the remote debugging | ||
* port specifies the port number use between the client and the server | * port specifies the listening port number use between the client and the server | ||
* Replace localhost by an IP address if XBMC and Eclipse are on 2 different machines | * Replace localhost by an IP address if XBMC and Eclipse are on 2 different machines | ||
* stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console, you won't have to open xbmc.log file | * stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console, you won't have to open xbmc.log file | ||
Line 175: | Line 194: | ||
* Start XBMC and run your script/plugin, you will see it as "Running" but paused | * Start XBMC and run your script/plugin, you will see it as "Running" but paused | ||
* In Eclipse (Debug View) | * In Eclipse (Debug View) click on the Resume button (or F8), then you will see the program running in XBMC | ||
* You are now fully set up: You can set | * You are now fully set up: You can set break-point, watch on variables, run step by step etc | ||
* Enjoy! | * Enjoy! |
Revision as of 03:18, 4 February 2012
Here is a method you can use in order to use the Eclipse (multi-platforms) remote debugger with you Python scripts/plugin.
Note: Follow this link Debugging Python Scripts on Linux with WinPDB for more information if you prefer to use WinPDB instead.
Prerequisite
- Any platform able to run Eclipse IDE (Windows 32bit-64bit, Mac Carbon 32bit-64bit, Mac Cocoa 32bit-64bit, Linux 32bit-64bit): it is the platform from where you will run the debugger IDE
- Pyhton interpreter 2.4 (use the same version as XBMC or version <= 2.7 ) install on the machine running Eclipse
- Any platform running XBMC (Xbox, Linux, MACOSX, Windows): it is the platform running Python scripts/plugin connecting with the remote debugger.
- XBMC installed on Ubuntu (should work just fine on Windows and Mac too)
- Pydev plugin for Eclipse IDE: Pydev is a Python IDE for Eclipse, which may be used in Python, Jython and IronPython development.
- Note: The information provided herein is also applicable to user with Aptana Studio 3 installation which come pre-installed with pydev. For this case, you can skip to Configure Pydev and Eclipse after the Aptana Studio 3 installation.
Prepare and Setup Eclipse
Install Eclipse
- Download Eclipse IDE and install it
Note: in our example Eclipse Galileo (3.5.1) is used
Install Pydev in Eclipse
- In Eclipse go in: Help -> Install New Software...
- Click on the Add button and add Pydev website as a source: http://pydev.org/updates
- You will see the window below:
- Check PyDev box and follow the steps in order to install PyDev
Note: in our example PyDev 1.5.5
Configure Pydev and Eclipse
Add Pyhton Interpreter Path
- Go in Window -> Preferences
- Pydev then Interpreter - Python
- Click on button New...
- In the new prompt, enter the Interpreter Name: Python, and Browse for your Python Interpreter 2.4 python.exe file and select it. After that you should see something like this:
This will help in order to have Python code completion (except for XBMC modules)
Add Pydev view to Eclipse
- On the top right corner click on the View button on select Others
- Select Pydev then OK, a PyDev View Button should be now available on the top right corner
Use this view for your developments in Python for XBMC
Add Pydev Start/Stop debug server buttons
- Right click on the toolbar empty area
- Select Customize perspective..., a window Customize Perspective - PyDev will open
- Select Command Groups Availability Tab
- Check Pydev Debug box and OK
- You should see 2 new buttons in your toolbar:
Setting the remote debugger port (optional)
If you do not want to use the default port (usually 5678) you can set it up:
- Go to Window -> Preferences
- Pydev then Debug you can define here the port and the timeout you want
Create a Python script/plugin for XBMC in Eclipse
Create a new PyDev Project
Most of the time when you are doing development, likely that you are running XBMC and Eclipse on the same platform (the installed debugger can also work with a remote XBMC too). Let say you already have a script installed in XBMC script folder In order to create a new PyDev project:
- File -> Switch Workspace -> Other...
- Browse to the parent directory of your script module i.e. C:\XBMC\myscript in this example, select and OK
You may wish to select the directory C:XBMC if myscript contains also other similar sub-directories like myscript
- File -> New -> PyDev Project
- OR select below in case PyDev Project is not displayed
- File -> New -> Others and Select Pydev then PyDev Project; Click Next
- Enter the name of your project
- Uncheck option Use Default
- Browse to the directory of your script where XBMC is installed for example:
C:\XBMC\scripts\myscript
with myscript being a sub-directory containing the Default.py script.
- Set Python' as Project Type
- Select 2.4 (XBMC Python version) for the grammar
- Select Don't configure PYTHONPATH (to be done manually later on)
- Click on Finish button
Set the Python Path
- Right click on your new project and select Properties
- Select PyDev - PYTHONPATH and click on Add source folder
- Select the source directory of your script (or plugin), myscript in our example
Import File System
Assuming you want to add in all the directories under C:\XBMC
- Right click on your new project and select Import...
- Select General and click on File System; then Next
- Browse to the source directory of your script (or plugin) e.g. C:\XBMC
- Check all the directory and files to be added
- Select Into folder: XBMC"
- Select Options|<<Advanced|Create links in workspace [Create virtual folders]
- Click on Finish button
Your source code is now recognized by Eclipse and you will have access to neat functionality such as code completion, link between source files, etc.
Add Pydev Python source code (pysrc) to XBMC
XBMC needs to know where to find the PyDev remote python source file in order to communicate with the remote debugger of Eclipse.
Identify where PyDev remote debugger Python files are
Python source files should be in you Eclipse installation directory:
C:\...\eclipse\plugins\org.python.pydev.debug_1.5.5.2010030420\pysrc\
In our case we use PyDev 1.5.5. Look for org.python.pydev.debug (not core)
Modify PyDev source in order to support XBMC paths
The pysrc code that came with Eclipse-pydev does not support XBMC paths (special://... or Q:/...) and the module would not find them making it impossible to insert breakpoints in such files.
In order to add the support of XBMC paths, you will need to do a simple modification to the file pydevd_file_utils.py consisting on adding a line to each procedure that had a filename parameter (4 procedures in total). Add a line like
def _NormFile(filename): filename = xbmc.translatePath(filename) try: ...
The other three procedures are:
- def _NormFile(filename):
- def NormFileToServer(filename):
- def NormFileToClient(filename):
of course you need the import directive at the top of the file:
import xbmc
at the beginning of the module...
Choose how XBMC will refer to Pydev debugging module
You have 3 options as below:
- Option 1 - Refer from our python script directly the directory where pysrc is installed
- Option 2 - Copy pysrc in our script directory and refer it from our script
- Option 3 - Copy pysrc in XBMC Python install
I am only going to show you the steps for Option 3:
Copy pysrc in XBMC Python install
- Copy the content of to pysrc to:
XBMC\system\python\Lib\pysrc\
- Add an empty __init__.py file in it
Add to your python script the code for remote debug
At the beginning of you Python script/plugin (usually Default.py) add the following code:
REMOTE_DBG = True # append pydev remote debugger if REMOTE_DBG: # Make pydev debugger works for auto reload. # Note pydevd module need to be copied in XBMC\system\python\Lib\pysrc try: import pysrc.pydevd as pydevd # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console pydevd.settrace('localhost', stdoutToServer=True, stderrToServer=True) except ImportError: sys.stderr.write("Error: " + "You must add org.python.pydev.debug.pysrc to your PYTHONPATH.") sys.exit(1)
In the case you have change the default port you can replace the line with pydevd.settrace by this one:
pydevd.settrace('localhost', port=5678, stdoutToServer=True, stderrToServer=True)
- Use REMOTE_DBG in order to activate or not the remote debugging
- port specifies the listening port number use between the client and the server
- Replace localhost by an IP address if XBMC and Eclipse are on 2 different machines
- stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console, you won't have to open xbmc.log file
Run
- You will see in the console logs like:
Debug Server at port: 5678
- Start XBMC and run your script/plugin, you will see it as "Running" but paused
- In Eclipse (Debug View) click on the Resume button (or F8), then you will see the program running in XBMC
- You are now fully set up: You can set break-point, watch on variables, run step by step etc
- Enjoy!