[Tutorial - Python - Debugging Ableton Remote Scripts] How To
Posted: Sun Oct 04, 2020 2:33 pm
Hello!
I've been writing few remote scripts for Ableton, and something I've struggled quite a bit was debugging them.
It's a personal thing, usually when I code, especially in an environment that I don't know, I need to debug it to understand what's behind the curtain.
Anyway, how?
I've used remote pdb, here's what you have to do in order to use it [Windows]:
The target folder is your Midi Remote Scripts folder.
This will install remote_pdb and make it accessible in your remote scripts.
Look for Telnet, enable it. This will allow you to connect to the pdb process in Ableton.
Remember, Debugger is the singleton class we created in the previous point, so you'll have to import it from wherever you created it.
This is normal, as the process is awaiting on the python debugger connection.
In your terminal, run the following command:
Check pdb page for the commands, few of them quickly:
Iacopo
I've been writing few remote scripts for Ableton, and something I've struggled quite a bit was debugging them.
It's a personal thing, usually when I code, especially in an environment that I don't know, I need to debug it to understand what's behind the curtain.
Anyway, how?
I've used remote pdb, here's what you have to do in order to use it [Windows]:
- Pip install remote_pdb in Ableton Remote Scripts folder
Code: Select all
pip install remote-pdb --target="C:\ProgramData\Ableton\Live 10 Standard\Resources\MIDI Remote Scripts\"
This will install remote_pdb and make it accessible in your remote scripts.
- Enable telnet in Windows.
Look for Telnet, enable it. This will allow you to connect to the pdb process in Ableton.
- The following point is my own pattern, you can do this differently. I created a singleton class which runs the connection listener. This has to be done ONCE, or the process will get stuck and you'll have to use a different terminal each time you run the connection listener creation. The singleton pattern creates the listener just once time in a Debugger singleton class, that you can later on access quickly.
Code: Select all
from .remote_pdb import RemotePdb
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instances[cls]
class Debugger:
__metaclass__ = Singleton
def __init__(self):
self._remote_pdb = RemotePdb('127.0.0.1', 4444) # 444 is my port, you can use another one if you prefer.
def set_trace(self):
self._remote_pdb.set_trace()
- Set your breakpoints.
Code: Select all
Debugger().set_trace()
- Run Ableton, and open a terminal window.
This is normal, as the process is awaiting on the python debugger connection.
In your terminal, run the following command:
Code: Select all
telnet 127.0.0.1 4444
Check pdb page for the commands, few of them quickly:
- n: Next line of code
- s: Step inside code
- c: continue to next breakpoint.
- w: shows a traceback around the current line of code.
Iacopo