Search code examples
pythondebuggingpydev

pydev debugger usage as a python module


pydev debugger is a python debugger used by pydev and pycharm. It seems much more powerful than pdb. Its code is available (https://github.com/fabioz/PyDev.Debugger), and it is easy to install through pip. The package name is pydevd.

However, there is no information on how to use it from python code (outside of pydev or pycharm IDE). The documentation is completely lacking.

Does anyone know how to use it? I would like to do something like that:

import pydevd

pdd = pydevd.debug("python myscript.py")

pdd.set_break_point(file="myscript.py", lineno=12)
pdd.start()
pdd.read_variable("a")
pdd.continue()

Solution

  • well, I agree that the docs are lacking, but the idea is mostly that you'd use it from within the IDE, not programmatically.

    The only public API you should use programmaticallyis pydevd.settrace(), which is the API which will setup a breakpoint at the place it's put programmatically (meaning the debugger will stop at that line -- the same effect of having pdb.set_trace() -- and that same API will also connect to the frontend for remote debugging if it's still not connected (i.e.: http://www.pydev.org/manual_adv_remote_debugger.html -- code: https://github.com/fabioz/PyDev.Debugger/blob/a4a58179dab9f9fb93559066f0ef22ac59c59e04/pydevd.py#L1065).

    Now, currently the only frontends are PyDev and PyCharm, there's no frontend that gives you a command line... the whole communication happens by connecting to a thread in the debugger backend through a socket (again, there are no real docs, but the code should be easy to read on what the socket accepts and the protocol is pretty simple: https://github.com/fabioz/PyDev.Debugger/blob/a4a58179dab9f9fb93559066f0ef22ac59c59e04/_pydevd_bundle/pydevd_process_net_command.py).

    There are unit-tests in pure-python code which exercise that (i.e.: connect to a debugger, and issue commands through sockets -- https://github.com/fabioz/PyDev.Debugger/blob/a4a58179dab9f9fb93559066f0ef22ac59c59e04/tests_python/debugger_unittest.py), so, it shouldn't be that hard to actually do a command-line frontend to it -- it's just that no one had interest on it until now, but if someone would like to contribute a command-line frontend to PyDev.Debugger, it'd be welcome ;)