Usage Examples

Check Debug Client Attachment

import omni.kit.debug.python

# Check if a debug client is attached
is_attached = omni.kit.debug.python.is_attached()
print(f"Debug client attached: {is_attached}")

Get Debugging Listen Address

import omni.kit.debug.python

# Get the listen address for the debugger
listen_address = omni.kit.debug.python.get_listen_address()
print(f"Debugger listen address: {listen_address}")

Use Extension Class Methods

import omni.kit.debug.python

# Instantiate the Extension class
debug_extension = omni.kit.debug.python.Extension()

# Start debugging environment based on settings in the on_startup method
debug_extension.on_startup()

Enable Debug Logging

import omni.kit.debug.python
import debugpy

# Attempt to enable logging only if it hasn't been enabled already
try:
    omni.kit.debug.python.enable_logging()
except RuntimeError as e:
    if str(e) != "logging has already begun":
        raise

Wait for Debug Client Connection

import omni.kit.debug.python
import debugpy

# Attempt to listen for a client to attach to the debugger
# only if the address is not already in use
try:
    # Check if a server is already listening
    if not debugpy.is_client_connected():
        debugpy.listen(("0.0.0.0", 5678))
except Exception as e:
    if "Address already in use" in str(e):
        print("Debugpy server already running, not attempting to listen again.")
    else:
        raise

# Proceed to wait for a client only if debugpy is able to listen
try:
    omni.kit.debug.python.wait_for_client()
except RuntimeError as e:
    if "listen() or connect() must be called first" in str(e):
        print("Debugpy server is not listening, cannot wait for client.")
    else:
        raise

Set Breakpoint in Code

import omni.kit.debug.python
import debugpy

# Attempt to listen for a client and wait for it to attach to the debugger
# only if the address is not already in use and no client is connected
try:
    if not debugpy.is_client_connected():
        debugpy.listen(("0.0.0.0", 5678))
except Exception as e:
    if "Address already in use" in str(e):
        print("Debugpy server already running, not attempting to listen again.")
    else:
        raise

# Proceed to wait for a client only if debugpy is able to listen
try:
    debugpy.wait_for_client()

    # Set a breakpoint in the code
    omni.kit.debug.python.breakpoint()
except RuntimeError as e:
    if "listen() or connect() must be called first" in str(e):
        print("Debugpy server is not listening, cannot set breakpoint.")
    else:
        raise