diff --git a/scripts/lib/devtool/ide_plugins/__init__.py b/scripts/lib/devtool/ide_plugins/__init__.py
index fd66060682..46d54f983e 100644
--- a/scripts/lib/devtool/ide_plugins/__init__.py
+++ b/scripts/lib/devtool/ide_plugins/__init__.py
@@ -125,13 +125,17 @@ class DebuggerCrossConfig:
         port = self.port(mode)
         dump_log = "cat %s >&2; " % log_file if log_file else ""
         cleanup = ""
+        died_check = ""
         if pid_var:
             cleanup = "kill \\$_%s 2>/dev/null; " % pid_var
+            died_check = (
+                "kill -0 \\$_%s 2>/dev/null || { %secho %s exited before it started listening on port %s >&2; exit 1; }; "
+                    % (pid_var, dump_log, self.DEBUG_SERVER_NAME, port))
         return (
-            "_w=0; while ! %s; do _w=\\$((_w+1)); [ \\$_w -lt %d ] || { "
+            "_w=0; while ! %s; do %s_w=\\$((_w+1)); [ \\$_w -lt %d ] || { "
             "%secho %s did not start on port %s after \\$_w retries >&2; %sexit 1; }; "
             "sleep 0.1; done;"
-                % (self._target_tcp_port_check_cmd(mode), self.TARGET_START_RETRIES,
+                % (self._target_tcp_port_check_cmd(mode), died_check, self.TARGET_START_RETRIES,
                     cleanup, self.DEBUG_SERVER_NAME, port, dump_log))
 
     def _target_wait_for_process_exit_cmd(self, pid_var):
@@ -268,6 +272,7 @@ class LldbServerConfig(DebuggerCrossConfig):
     PID argument; attaching is done client-side via 'process attach'.
     """
     DEBUG_SERVER_NAME = "lldb-server"
+    TARGET_START_RETRIES = 600
 
     def __init__(self, image_recipe, modified_recipe, binary,
                  default_mode=DebuggerServerModes.MULTI):
