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

Share your Ableton Live secrets here
Post Reply
ginwakeup
Posts: 4
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

slemerdy
Posts: 3
Joined: Fri Feb 23, 2018 5:19 pm

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

Post by slemerdy » Tue Feb 09, 2021 10:49 am

Hello,
Seems to be interesting indeed ! Thanks for the info.
I need to install Serial to control a UART based device with my remote script. Do you think I could use the command you gave. I will try that !

The Rabbits
Posts: 69
Joined: Tue Apr 07, 2020 2:23 pm

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

Post by The Rabbits » Wed Feb 10, 2021 12:14 am

Thanks for the information. I've been trying to figure out how to debug my scripts. Currently doing it old-school with logging and the
-AutoShowPythonShellOnError flag in options.txt.

The Rabbits
Posts: 69
Joined: Tue Apr 07, 2020 2:23 pm

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

Post by The Rabbits » Fri Feb 12, 2021 5:52 am

Quick question, is there a way to get ableton to reload/recompile a script without restarting it? That's the most time consuming part of the process.

Thanks

ginwakeup
Posts: 4
Joined: Sun Sep 20, 2020 5:19 pm

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

Post by ginwakeup » Sat Apr 03, 2021 9:53 pm

The Rabbits wrote:
Fri Feb 12, 2021 5:52 am
Quick question, is there a way to get ableton to reload/recompile a script without restarting it? That's the most time consuming part of the process.

Thanks
Hey,

you can try using python "reload" builtin or sometimes changing the control surface from options - preferences - MIDI works fine.

Post Reply