mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-30 10:07:14 +02:00
Add support for debugging server "ready_pattern"
This commit is contained in:
@ -125,7 +125,8 @@ def validate_debug_options(cmd_ctx, env_options):
|
|||||||
server_options["executable"] = server_options["arguments"][0]
|
server_options["executable"] = server_options["arguments"][0]
|
||||||
server_options["arguments"] = server_options["arguments"][1:]
|
server_options["arguments"] = server_options["arguments"][1:]
|
||||||
elif "server" in tool_settings:
|
elif "server" in tool_settings:
|
||||||
server_package = tool_settings["server"].get("package")
|
server_options = tool_settings["server"]
|
||||||
|
server_package = server_options.get("package")
|
||||||
server_package_dir = (
|
server_package_dir = (
|
||||||
platform.get_package_dir(server_package) if server_package else None
|
platform.get_package_dir(server_package) if server_package else None
|
||||||
)
|
)
|
||||||
@ -134,15 +135,17 @@ def validate_debug_options(cmd_ctx, env_options):
|
|||||||
with_packages=[server_package], skip_default_package=True, silent=True
|
with_packages=[server_package], skip_default_package=True, silent=True
|
||||||
)
|
)
|
||||||
server_package_dir = platform.get_package_dir(server_package)
|
server_package_dir = platform.get_package_dir(server_package)
|
||||||
server_options = dict(
|
server_options.update(
|
||||||
cwd=server_package_dir if server_package else None,
|
dict(
|
||||||
executable=tool_settings["server"].get("executable"),
|
cwd=server_package_dir if server_package else None,
|
||||||
arguments=[
|
executable=server_options.get("executable"),
|
||||||
a.replace("$PACKAGE_DIR", server_package_dir)
|
arguments=[
|
||||||
if server_package_dir
|
a.replace("$PACKAGE_DIR", server_package_dir)
|
||||||
else a
|
if server_package_dir
|
||||||
for a in tool_settings["server"].get("arguments", [])
|
else a
|
||||||
],
|
for a in server_options.get("arguments", [])
|
||||||
|
],
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
extra_cmds = _cleanup_cmds(env_options.get("debug_extra_cmds"))
|
extra_cmds = _cleanup_cmds(env_options.get("debug_extra_cmds"))
|
||||||
|
@ -35,6 +35,7 @@ class DebugServer(BaseProcess):
|
|||||||
self._debug_port = ":3333"
|
self._debug_port = ":3333"
|
||||||
self._transport = None
|
self._transport = None
|
||||||
self._process_ended = False
|
self._process_ended = False
|
||||||
|
self._ready = False
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def spawn(self, patterns): # pylint: disable=too-many-branches
|
def spawn(self, patterns): # pylint: disable=too-many-branches
|
||||||
@ -126,15 +127,7 @@ class DebugServer(BaseProcess):
|
|||||||
timeout = 10
|
timeout = 10
|
||||||
elapsed = 0
|
elapsed = 0
|
||||||
delay = 1
|
delay = 1
|
||||||
ready_delay = 0.5
|
while not self._ready and not self._process_ended and elapsed < timeout:
|
||||||
while (
|
|
||||||
not self._process_ended
|
|
||||||
and elapsed < timeout
|
|
||||||
and (
|
|
||||||
not self._last_activity
|
|
||||||
or not (self._last_activity < (time.time() - ready_delay))
|
|
||||||
)
|
|
||||||
):
|
|
||||||
yield self.async_sleep(delay)
|
yield self.async_sleep(delay)
|
||||||
elapsed += delay
|
elapsed += delay
|
||||||
|
|
||||||
@ -151,6 +144,14 @@ class DebugServer(BaseProcess):
|
|||||||
super(DebugServer, self).outReceived(
|
super(DebugServer, self).outReceived(
|
||||||
escape_gdbmi_stream("@", data) if is_gdbmi_mode() else data
|
escape_gdbmi_stream("@", data) if is_gdbmi_mode() else data
|
||||||
)
|
)
|
||||||
|
if self._ready:
|
||||||
|
return
|
||||||
|
ready_pattern = self.debug_options.get("server", {}).get("ready_pattern")
|
||||||
|
if ready_pattern:
|
||||||
|
self._ready = ready_pattern.encode() in data
|
||||||
|
else:
|
||||||
|
ready_delay = 0.5
|
||||||
|
self._ready = self._last_activity < (time.time() - ready_delay)
|
||||||
|
|
||||||
def processEnded(self, reason):
|
def processEnded(self, reason):
|
||||||
self._process_ended = True
|
self._process_ended = True
|
||||||
|
Reference in New Issue
Block a user