Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pdb remote debugging over socket for Sublime Text 2 plug-in development [duplicate]

I want to debug my plugin with pdb but it doesn't work. I get these errors

Traceback (most recent call last):
  File "./sublime_plugin.py", line 362, in run_
  File "./useIt.py", line 14, in run
    for region in self.view.sel():
  File "./useIt.py", line 14, in run
    for region in self.view.sel():
  File ".\bdb.py", line 46, in trace_dispatch
  File ".\bdb.py", line 65, in dispatch_line
bdb.BdbQuit

Has anyone an idea? Or some other way to debug a sublime plugin?

like image 790
Azd325 Avatar asked Jan 21 '26 04:01

Azd325


1 Answers

The problem is that sys.stdin is not attached to anything normally. But, sys.stdin does work if you start SublimeText2 from a console:

  • On Mac, start the application by locating the executable in the resource bundle by entering the full path in the Terminal:

    /Applications/Sublime\ Text\ 2.app/Contents/MacOS/Sublime\ Text\ 2
    
  • On Windows, start the application from the Windows Console:

    "C:\Program Files\Sublime Text 2\sublime_text.exe"
    

    provisional, I have no Windows Sublime Text 2 install so this command line is based on a quick Google

Now the application has a console; but sys.stdout is still redirected to the built-in SublimeText 2 console. You want to start your debugger with the correct stdout, the one still connected to your console. Instead of import pdb; pdb.set_trace(), use:

import pdb, sys; pdb.Pdb(stdout=sys.__stdout__).set_trace()

The original console stdout is saved in sys.__stdout__ and by passing that to pdb.Pdb() you get a fully functional pdb session.

like image 62
Martijn Pieters Avatar answered Jan 23 '26 20:01

Martijn Pieters