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