Using a hardware controller for your debugger

Back when I was active recording my own music (SoundCloud for the curious) I always used a hardware knob to navigate and control Logic.

It was a very simple device (a knob which is also a big button) but incredibly useful. So I thought: if it was so wonderful with music software, perhaps it can useful on an IDE!

My main problem was the constant switching between clicking the simulator (or taping a real device) and typing the common two-handed shortcuts you need while debugging in Xcode: pause, step over, step into, etc.

Controller Options

I browsed MIDI controllers and video control surfaces, and bought a Contour Shuttle-Xpress after a little research. It’s small, inexpensive and comes with a dial and more than enough buttons.


Other options I considered were:

  • an updated version of the Griffin Powermate: It looks really neat but I wanted more than one button. Also, I’m not a big fan of changing batteries.
  • Palette Controllers: Nice looking but too expensive. If you don’t know what to do with your money, there is a Wood Edition for only $899.
  • MIDI controllers: Bulky and require some third party software converting MIDI to keyboard commands.


Next thing was just to configure my most used shortcuts and tune a little bit that configuration after some use. This is the layout I’m using right now:

Button Action
Big Left Button De / Activate Breakpoints
Left Button Add Breakpoint at Current Line
Central Button Debug – Pause
Right Button Debug – Continue
Big Right Button Debug – Step Into
Jog Wheel Up Arrow / Down Arrow
Springy Wheel Debug Step Over / Out


Definitively worth it!

It’s probably not as powerful as it is for video or music software, but it makes debugging more comfortable, and at 40-60 USD it’s worth a try.

Of course, you could also set different shortcuts, but the easy ones are already assigned, and if I really wanted to stretch my hands I would instead try to play something from Rachmaninoff.

Happy debugging!

Leave a Reply

Your email address will not be published. Required fields are marked *