{"library":"pygdbmi","title":"pygdbmi","description":"pygdbmi is a Python library that parses GDB's machine interface (MI) output into structured data (Python dictionaries) that are JSON serializable. It also provides a class, `GdbController`, to control GDB as a subprocess, allowing programmatic interaction for backend development of GDB frontends. It supports cross-platform debugging on Linux, macOS, and Windows. The current stable version is 0.11.0.0, with releases occurring periodically to introduce new features, fix bugs, and address breaking changes.","language":"python","status":"active","last_verified":"Fri May 15","install":{"commands":["pip install pygdbmi"],"cli":{"name":"pygdbmi","version":"sh: 1: pygdbmi: not found"}},"imports":["from pygdbmi.gdbcontroller import GdbController","from pygdbmi.gdbmiparser import parse_response","Removed in v0.10.0.0"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"from pygdbmi.gdbcontroller import GdbController\nfrom pprint import pprint\nimport os\nimport subprocess\nimport shutil\n\n# NOTE: This example assumes 'make' and 'gdb' are available in your PATH.\n# Create a dummy C program for debugging\nif not os.path.exists('sample_app'):\n    os.makedirs('sample_app')\nwith open('sample_app/main.c', 'w') as f:\n    f.write('int main() { int x = 1; x++; return 0; }')\n\nif shutil.which('gcc') and shutil.which('make'):\n    subprocess.run(['gcc', 'main.c', '-o', 'pygdbmiapp', '-g'], cwd='sample_app', check=True)\n    binary_path = os.path.abspath('sample_app/pygdbmiapp')\nelse:\n    print(\"Warning: 'gcc' or 'make' not found. Quickstart will only demonstrate parsing.\")\n    binary_path = None\n\ngdbmi = GdbController()\n\ntry:\n    if binary_path:\n        print(f\"\\nDebugging: {binary_path}\")\n        # Load the binary\n        responses = gdbmi.write(f\"-file-exec-and-symbols {binary_path}\")\n        print(\"Load binary response:\")\n        pprint(responses)\n\n        # Set a breakpoint at main\n        responses = gdbmi.write(\"-break-insert main\")\n        print(\"Breakpoint response:\")\n        pprint(responses)\n\n        # Run the program\n        responses = gdbmi.write(\"-exec-run\")\n        print(\"Run response:\")\n        pprint(responses)\n\n        # Continue to finish\n        responses = gdbmi.write(\"-exec-continue\")\n        print(\"Continue response:\")\n        pprint(responses)\n\n    # Example of parsing raw MI output\n    print(\"\\nParsing raw GDB MI output:\")\n    raw_mi_output = '^done,bkpt={number=\"1\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"0x08048564\",func=\"main\",file=\"myprog.c\",fullname=\"/home/myprog.c\",line=\"68\",thread-groups=[\"i1\"],times=\"0\"}'\n    parsed_response = gdbmi.gdbmiparser.parse_response(raw_mi_output)\n    pprint(parsed_response)\n\nfinally:\n    # Ensure gdb process is terminated\n    gdbmi.exit()\n    print(\"\\nGDB process exited.\")\n    # Clean up dummy app\n    shutil.rmtree('sample_app', ignore_errors=True)","lang":"python","description":"This quickstart demonstrates how to use `GdbController` to interact with a GDB subprocess programmatically, including loading a binary, setting a breakpoint, running, and continuing execution. It also shows how to directly parse a raw GDB MI output string using `gdbmiparser.parse_response`. A simple C program is compiled and used as the debug target for the demonstration.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-15","installed_version":"0.11.0.0","pypi_latest":"0.11.0.0","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":1.5,"avg_import_s":0.07,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pygdbmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.05,"mem_mb":2.5,"disk_size":"17.9M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pygdbmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.03,"mem_mb":2.5,"disk_size":"18M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pygdbmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.11,"mem_mb":3.1,"disk_size":"19.8M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pygdbmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.1,"mem_mb":3.1,"disk_size":"20M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pygdbmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.1,"mem_mb":4,"disk_size":"11.6M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pygdbmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.4,"import_time_s":0.1,"mem_mb":4,"disk_size":"12M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pygdbmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.1,"mem_mb":4.1,"disk_size":"11.4M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pygdbmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.4,"import_time_s":0.09,"mem_mb":3.9,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pygdbmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.03,"mem_mb":1.8,"disk_size":"17.4M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pygdbmi","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.7,"import_time_s":0.03,"mem_mb":1.8,"disk_size":"18M"}]}}