{ "info": { "author": "\u0141ukasz Mach", "author_email": "maho@pagema.net", "bugtrack_url": null, "classifiers": [ "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: ISC License (ISCL)", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX", "Programming Language :: Python :: 3.0", "Programming Language :: Python :: 3.1", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Debuggers" ], "description": "# pdbme - remote active debugger based on rpdb\n\nThis is active fork of https://github.com/tamentis/rpdb. \n\nRpdb is a wrapper around pdb that re-routes stdin and stdout to a socket\nhandler. \n\nPdbme is Rpdb, which is active. Which means, that while Rpdb open port and waits until you connect to this port, Pdbme connects to your port. \n\nSo, in other words, you open pdbme-cli tool, ask your app \"pdb me please\" and your app will pdb you :). \n\n## Why active?\n\nRpdb opens debugger pon port (default 4444), but it has many drawbacks. Eg - it cannot be used in mutlithreaded or multiprocessing application. Even in non-parallel app, port can be occupied a little while after closing it and app will break trying to open it again. \n\nCalling your terminal sounds way better way. It's useful when you want to debug app which can break\nsimultaneously more than once in a time, and passive mode will refuse to open\nport 4444 again.\n\nSolution to the problem is:\n\n # default host is 127.0.0.1 and default port is 4444\n import pdbme; pdbme.set_trace()\n\nor, in more complex case, eg. when it's running in other host, in your docker, or sth like that\n\n import pdbme\n pdbme.set_trace(host='192.168.1.120', port=12345)\n\nYou should have pdbme-cli running on other side of your communication. \n\n### pdbme-cli\n\npdbme-cli is a simple tool, using tmux, tcpwrapper and socat to accept incoming\nconnections and spawn tmux session for each incoming breakpoint. \n\n * tcpwrapper comes from https://cr.yp.to/ucspi-tcp.html (available in many distros and in MacOS brew)\n * socat - http://www.dest-unreach.org/socat/\n\n\nInstallation in CPython (standard Python)\n-----------------------------------------\n\n ~~pip install pdbme~~ (not yet on PyPi)\n\nor\n\n pip install git+https://github.com/mahomahomaho/pdbme\n\n\nTrigger rpdb with signal\n------------------------\n\n`set_trace()` can be triggered at any time by using the TRAP signal handler.\nThis allows you to debug a running process independantly of a specific failure\nor breakpoint::\n\n import pdbme\n pdbme.handle_trap()\n\n # As with set_trace, you can optionally specify addr and port\n rpdb.handle_trap(host=\"0.0.0.0\", port=4441)\n\nCalling `handle_trap` will overwrite the existing handler for SIGTRAP if one has\nalready been defined in your application.\n\nAuthor(s)\n---------\n\n\u0141ukasz Mach - http://pagema.net/\n\nbased on work of rpdb author:\nBertrand Janin - http://tamentis.com/ \n\nand rpdbs contributors: (chronological, latest first):\n\n - Cameron Davidson-Pilon - @CamDavidsonPilon\n - Pavel Fux - @fuxpavel\n - Ken Manheimer - @kenmanheimer\n - Steven Willis - @onlynone\n - Jorge Niedbalski R \n - Cyprien Le Pann\u00e9rer \n - k4ml \n - Sean M. Collins \n - Sean Myers \n\n\n0.0.1 (2019-06-14)\n==================\n - New functionality, new package name, new versioning....\n - dropped some rpdb functionality, \n\n0.1.6 (2015-01-05)\n==================\n\n - Give access to attributes of stdin and stdout (by @fuxpavel).\n - Add rpdb.post_mortem(), similar to pdb.post_mortem() (by @CamDavidsonPilon).\n\n0.1.5 (2014-10-16)\n==================\n\n - Write addr/port to stderr instead of stdout (thanks to @onlynone).\n - Allow for dynamic host port (thanks to @onlynone).\n - Make q/quit do proper cleanup (@kenmanheimer)\n - Benignly disregard repeated rpdb.set_trace() to same port as currently\n active session (@kenmanheimer)\n - Extend backwards compatibility down to Python 2.5 (@kenmanheimer)\n\n0.1.4 (2014-04-28)\n==================\n\n - Expose the addr, port arguments to the set_trace method (thanks to @niedbalski).\n\n0.1.3 (2013-08-02)\n==================\n\n - Remove a try/finally that seemed to shift the trace location (thanks to k4ml@github).\n\n0.1.2 (2012-01-26)\n==================\n\n - Catch IOError raised by print in initialization, it may not work in some\n environments (e.g. mod_wsgi). (Menno Smits)\n\n0.1.1 (2010-05-09)\n==================\n\nInitial release.\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/mahomahomaho/pdbme", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "pdbme", "package_url": "https://pypi.org/project/pdbme/", "platform": "", "project_url": "https://pypi.org/project/pdbme/", "project_urls": { "Homepage": "http://github.com/mahomahomaho/pdbme" }, "release_url": "https://pypi.org/project/pdbme/0.0.1/", "requires_dist": null, "requires_python": "", "summary": "remote pdb which connects to developer", "version": "0.0.1" }, "last_serial": 5409781, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "4dd501daea97e0e5fffa0719e095f3e7", "sha256": "fdbdd47cea5b435a3136c46df63badb18c75be848ec41488fcf1e036c97cef9f" }, "downloads": -1, "filename": "pdbme-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4dd501daea97e0e5fffa0719e095f3e7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8073, "upload_time": "2019-06-17T11:48:42", "url": "https://files.pythonhosted.org/packages/30/1e/f64ef443a8e3d87ee994e3e04c3f1d1c268ac387d5456215ca781b3975a6/pdbme-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "00c3cd761870bfd025488312ff4f895a", "sha256": "484fef178894c51aeb47aa04214cc5bad6d77174aba4c08ae295e7fb756a161b" }, "downloads": -1, "filename": "pdbme-0.0.1.tar.gz", "has_sig": false, "md5_digest": "00c3cd761870bfd025488312ff4f895a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6348, "upload_time": "2019-06-17T11:48:44", "url": "https://files.pythonhosted.org/packages/b8/bf/b1ae78a94943048243c919a0a30cf32fe8d853c8657236c70ab5c262be13/pdbme-0.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4dd501daea97e0e5fffa0719e095f3e7", "sha256": "fdbdd47cea5b435a3136c46df63badb18c75be848ec41488fcf1e036c97cef9f" }, "downloads": -1, "filename": "pdbme-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4dd501daea97e0e5fffa0719e095f3e7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8073, "upload_time": "2019-06-17T11:48:42", "url": "https://files.pythonhosted.org/packages/30/1e/f64ef443a8e3d87ee994e3e04c3f1d1c268ac387d5456215ca781b3975a6/pdbme-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "00c3cd761870bfd025488312ff4f895a", "sha256": "484fef178894c51aeb47aa04214cc5bad6d77174aba4c08ae295e7fb756a161b" }, "downloads": -1, "filename": "pdbme-0.0.1.tar.gz", "has_sig": false, "md5_digest": "00c3cd761870bfd025488312ff4f895a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6348, "upload_time": "2019-06-17T11:48:44", "url": "https://files.pythonhosted.org/packages/b8/bf/b1ae78a94943048243c919a0a30cf32fe8d853c8657236c70ab5c262be13/pdbme-0.0.1.tar.gz" } ] }