# Python Extensions

LLDB provides scriptable extensions to augment the debugger's capabilities.
This gives users the ability to tailor their debugging experience to their own needs.

This page describes some of these scripting extensions:

## Operating System Thread Plugins

```{eval-rst}
.. automodule:: lldb.plugins.operating_system

.. automodsumm:: lldb.plugins.operating_system
    :classes-only:
    :toctree: python_api
    :skip: ScriptedThread
```

## Parsed Command Plugins

```{eval-rst}
.. automodule:: lldb.plugins.parsed_cmd

.. automodsumm:: lldb.plugins.parsed_cmd
    :classes-only:
    :toctree: python_api
```

## Scripted Breakpoint Resolver Plugins

```{eval-rst}
.. automodule:: lldb.plugins.scripted_breakpoint

.. automodsumm:: lldb.plugins.scripted_breakpoint
    :classes-only:
    :toctree: python_api
    :skip: ABCMeta
```

## Scripted Command Plugins

```{eval-rst}
.. automodule:: lldb.plugins.scripted_command

.. automodsumm:: lldb.plugins.scripted_command
    :classes-only:
    :toctree: python_api
    :skip: ABCMeta
```

## Scripted Frame Provider Plugins

```{eval-rst}
.. automodule:: lldb.plugins.scripted_frame_provider

.. automodsumm:: lldb.plugins.scripted_frame_provider
    :classes-only:
    :toctree: python_api
    :skip: ABCMeta
```

## Scripted Hook Plugins

```{eval-rst}
.. automodule:: lldb.plugins.scripted_hook

.. automodsumm:: lldb.plugins.scripted_hook
    :classes-only:
    :toctree: python_api
    :skip: ABCMeta
```

## Scripted Platform Plugins

```{eval-rst}
.. automodule:: lldb.plugins.scripted_platform

.. automodsumm:: lldb.plugins.scripted_platform
    :classes-only:
    :toctree: python_api
    :skip: ABCMeta
```

## Scripted Process Plugins

```{eval-rst}
.. automodule:: lldb.plugins.scripted_process

.. automodsumm:: lldb.plugins.scripted_process
    :classes-only:
    :toctree: python_api
    :skip: ABCMeta
```

## Scripted Stack Frame Recognizer Plugins

```{eval-rst}
.. automodule:: lldb.plugins.scripted_stackframe_recognizer

.. automodsumm:: lldb.plugins.scripted_stackframe_recognizer
    :classes-only:
    :toctree: python_api
    :skip: ABCMeta
```

## Scripted String Summary Plugins

```{eval-rst}
.. automodule:: lldb.plugins.scripted_string_summary

.. automodsumm:: lldb.plugins.scripted_string_summary
    :classes-only:
    :toctree: python_api
    :skip: ABCMeta
```

## Scripted Synthetic Children Plugins

```{eval-rst}
.. automodule:: lldb.plugins.scripted_synthetic_children

.. automodsumm:: lldb.plugins.scripted_synthetic_children
    :classes-only:
    :toctree: python_api
    :skip: ABCMeta
```

## Scripted Thread Plan Plugins

```{eval-rst}
.. automodule:: lldb.plugins.scripted_thread_plan

.. automodsumm:: lldb.plugins.scripted_thread_plan
    :classes-only:
    :toctree: python_api
```
