Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
336 views
in Technique[技术] by (71.8m points)

python - How to debug sublime plugins during development

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 ".db.py", line 46, in trace_dispatch
  File ".db.py", line 65, in dispatch_line
bdb.BdbQuit

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

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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 FilesSublime Text 2sublime_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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...