Cómo depurar complementos sublimes durante el desarrollo

Quiero depurar mi plugin con pdb pero no funciona. Me sale estos errores

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 

¿Alguien tiene una idea? ¿O alguna otra forma de depurar un complemento sublime?

El problema es que sys.stdin no está adjunto a nada normalmente . Pero, sys.stdin funciona si inicia SublimeText2 desde una consola:

  • En Mac, inicie la aplicación ubicando el ejecutable en el paquete de recursos ingresando la ruta completa en la Terminal:

     /Applications/Sublime\ Text\ 2.app/Contents/MacOS/Sublime\ Text\ 2 
  • En Windows, inicie la aplicación desde la Consola de Windows:

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

    provisional, no tengo ninguna instalación de Windows Sublime Text 2, por lo que esta línea de comandos se basa en un rápido Google

Ahora la aplicación tiene una consola; pero sys.stdout aún se redirige a la consola SublimeText 2 incorporada. Desea iniciar su depurador con el stdout correcto, el que todavía está conectado a su consola. En lugar de import pdb; pdb.set_trace() import pdb; pdb.set_trace() , usa:

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

El stdout consola original se guarda en sys.__stdout__ y al pasarlo a pdb.Pdb() se obtiene una sesión pdb completamente funcional.

Trabajando en mi complemento, no tuve mucha suerte con pdb, y “imprimir” no es una experiencia de depuración eficiente (por ejemplo, si no está seguro de dónde está el defecto, puede agregar una gran cantidad de “imprimir” – y luego hay que eliminarlos después).

Hay una alternativa mucho mejor si ejecuta Windows. La última versión 2.2 de las herramientas de Python para Visual Studio funciona muy bien para la depuración de complementos Sublime. Obtienes todas las funciones de depuración regulares de Visual Studio y es una experiencia refinada. Simplemente elija “pluginhost.exe” y el motor de depuración de Python en el cuadro de diálogo adjuntar. Antes de la versión 2.2, las herramientas de Python no funcionaban correctamente contra Sublime, por ejemplo, se rompió el paso.

Divulgación: trabajo en Visual Studio pero no trabajo en estas herramientas. Recientemente trabajé con el desarrollador de herramientas Python para corregir los errores que encontré al usar estas herramientas para escribir mi complemento.

La edición comunitaria de Visual Studio 2015 es gratuita para desarrolladores individuales y pequeñas organizaciones. Solo asegúrate de revisar las herramientas de Python en el cuadro de diálogo de configuración. Y, por supuesto, debes estar ejecutando Windows.

La forma más fácil que encontré fue usar Visual Studio.

Debe tener las herramientas de desarrollo de Python para Visual Studio (puede descargarlas abriendo el instalador de Visual Studio, haciendo clic en más, modificando y seleccionando el desarrollo de Python).

Para depurar, necesita abrir Visual Studio, seleccione desde la barra de herramientas: Depurar – Adjuntar para procesar (Ctrl + Alt + P) y luego busque ‘plugin_host.exe’ y adjuntar. Luego abre tu archivo ‘plugin.py’ y coloca un punto de interrupción en algún lugar y listo.

Su problema es que sys.stdin y sys.stdout (Edición: stdout va a la consola) están conectados a las sys.stdout internas del texto sublime. ¿Dónde espera poder controlar al depurador?

Lo que desea es una interfaz de depuración remota que interactúe a través de algo que no sea stdio, como rpdb .