[Tutorial - Python - Debugging Ableton Remote Scripts] How To

Share your Ableton Live secrets here
Post Reply
ginwakeup
Posts: 3
Joined: Sun Sep 20, 2020 5:19 pm

[Tutorial - Python - Debugging Ableton Remote Scripts] How To

Post by ginwakeup » 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]:
  • Pip install remote_pdb in Ableton Remote Scripts folder
create any virtual environment with python 2.7, or use your system interpreter and run the following command:

Code: Select all

pip install remote-pdb --target="C:\ProgramData\Ableton\Live 10 Standard\Resources\MIDI Remote Scripts\"
The target folder is your Midi Remote Scripts folder.
This will install remote_pdb and make it accessible in your remote scripts.
  • Enable telnet in Windows.
Open your control panel, click Programs, click Turn WIndows Features On/Off.
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.
In your code, set your breakpoints in the following way:

Code: Select all

Debugger().set_trace()
Remember, Debugger is the singleton class we created in the previous point, so you'll have to import it from wherever you created it.

  • Run Ableton, and open a terminal window.
Once Ableton loads, if you select your remote midi script, as soon as it hits the breakpoint the Ableton process should freeze.
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.
Hopefully this helped someone.

Iacopo

Post Reply