Files
clang-p2996/lldb/test/API/tools/lldb-dap/progress/Progress_emitter.py
Jacob Lalonde a939a9fd53 [LLDB-DAP] Send Progress update message over DAP (#123837)
When testing my SBProgress DAP PR (#123826), I noticed Progress update
messages aren't sent over DAP. This patch adds the lldb progress event's
message to the body when sent over DAP.

Before 

![image](https://github.com/user-attachments/assets/404adaa8-b784-4f23-895f-cd3625fdafad)


Now

![image](https://github.com/user-attachments/assets/eb1c3235-0936-4e36-96e5-0a0ee60dabb8)

Tested with my [progress tester
command](https://gist.github.com/Jlalond/48d85e75a91f7a137e3142e6a13d0947),
testing 10 events 5 seconds apart 1-10
2025-01-22 15:49:13 -08:00

85 lines
2.5 KiB
Python

import inspect
import optparse
import shlex
import sys
import time
import lldb
class ProgressTesterCommand:
program = "test-progress"
@classmethod
def register_lldb_command(cls, debugger, module_name):
parser = cls.create_options()
cls.__doc__ = parser.format_help()
# Add any commands contained in this module to LLDB
command = "command script add -c %s.%s %s" % (
module_name,
cls.__name__,
cls.program,
)
debugger.HandleCommand(command)
print(
'The "{0}" command has been installed, type "help {0}" or "{0} '
'--help" for detailed help.'.format(cls.program)
)
@classmethod
def create_options(cls):
usage = "usage: %prog [options]"
description = "SBProgress testing tool"
# Opt parse is deprecated, but leaving this the way it is because it allows help formating
# Additionally all our commands use optparse right now, ideally we migrate them all in one go.
parser = optparse.OptionParser(
description=description, prog=cls.program, usage=usage
)
parser.add_option(
"--total", dest="total", help="Total to count up.", type="int"
)
parser.add_option(
"--seconds",
dest="seconds",
help="Total number of seconds to wait between increments",
type="int",
)
return parser
def get_short_help(self):
return "Progress Tester"
def get_long_help(self):
return self.help_string
def __init__(self, debugger, unused):
self.parser = self.create_options()
self.help_string = self.parser.format_help()
def __call__(self, debugger, command, exe_ctx, result):
command_args = shlex.split(command)
try:
(cmd_options, args) = self.parser.parse_args(command_args)
except:
result.SetError("option parsing failed")
return
total = cmd_options.total
progress = lldb.SBProgress("Progress tester", "Detail", total, debugger)
for i in range(1, total):
progress.Increment(1, f"Step {i}")
time.sleep(cmd_options.seconds)
def __lldb_init_module(debugger, dict):
# Register all classes that have a register_lldb_command method
for _name, cls in inspect.getmembers(sys.modules[__name__]):
if inspect.isclass(cls) and callable(
getattr(cls, "register_lldb_command", None)
):
cls.register_lldb_command(debugger, __name__)