tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 932380034c974a5c4ee1d9f08f4f477d87f05573
parent 45fd8b48b2906e1b83e0307502e655ce430ef702
Author: Edgar Chen <echen@mozilla.com>
Date:   Mon,  3 Nov 2025 16:10:41 +0000

Bug 1261180 - Make marionette mach support --debugger; r=whimboo

Differential Revision: https://phabricator.services.mozilla.com/D265271

Diffstat:
Mtesting/marionette/client/marionette_driver/geckoinstance.py | 13++++++++++++-
Mtesting/marionette/harness/marionette_harness/runner/base.py | 31+++++++++++++++++++++++++++++++
2 files changed, 43 insertions(+), 1 deletion(-)

diff --git a/testing/marionette/client/marionette_driver/geckoinstance.py b/testing/marionette/client/marionette_driver/geckoinstance.py @@ -203,6 +203,7 @@ class GeckoInstance: profile=None, addons=None, app_args=None, + debugger_info=None, symbols_path=None, gecko_log=None, prefs=None, @@ -212,6 +213,7 @@ class GeckoInstance: ): self.runner_class = Runner self.app_args = app_args or [] + self.debugger_info = debugger_info self.runner = None self.symbols_path = symbols_path self.binary = bin @@ -380,7 +382,16 @@ class GeckoInstance: def start(self): self._update_profile(self.profile) self.runner = self.runner_class(**self._get_runner_args()) - self.runner.start() + + # debugger information + debug_args = None + interactive = False + + if self.debugger_info: + debug_args = [self.debugger_info.path] + self.debugger_info.args + interactive = self.debugger_info.interactive + + self.runner.start(debug_args, interactive) def _get_runner_args(self): process_args = { diff --git a/testing/marionette/harness/marionette_harness/runner/base.py b/testing/marionette/harness/marionette_harness/runner/base.py @@ -15,6 +15,7 @@ from argparse import ArgumentParser from collections import defaultdict from copy import deepcopy +import mozdebug import mozinfo import moznetwork import mozprofile @@ -411,6 +412,17 @@ class BaseMarionetteArguments(ArgumentParser): " Pass in the debugger you want to use, eg pdb or ipdb.", ) self.add_argument( + "--debugger", + default=None, + help="Debugger binary to run tests in. Program name or path", + ) + self.add_argument( + "--debugger-args", + dest="debugger_args", + default=None, + help="Arguments to pass to the debugger", + ) + self.add_argument( "--disable-fission", action="store_true", dest="disable_fission", @@ -530,6 +542,15 @@ class BaseMarionetteArguments(ArgumentParser): args.app_args.append("-jsdebugger") args.socket_timeout = None + if args.debugger_args and not args.debugger: + self.error("--debugger-args requires --debugger") + + if args.debugger: + # Valgrind and some debuggers may cause Gecko to start slowly. + # Make sure to wait long enough to connect. + args.startup_timeout = 900 + args.socket_timeout = None + args.prefs = self._get_preferences(args.prefs_files, args.prefs_args) for container in self.argument_containers: @@ -605,6 +626,8 @@ class BaseMarionetteTestRunner: address=None, app=None, app_args=None, + debugger=None, + debugger_args=None, binary=None, profile=None, logger=None, @@ -644,6 +667,8 @@ class BaseMarionetteTestRunner: self.address = address self.app = app self.app_args = app_args or [] + self.debugger = debugger + self.debugger_args = debugger_args self.bin = binary self.emulator = emulator self.profile = profile @@ -831,12 +856,18 @@ class BaseMarionetteTestRunner: "symbols_path": self.symbols_path, } if self.bin or self.emulator: + debugger_info = None + if self.debugger: + debugger_info = mozdebug.get_debugger_info( + self.debugger, self.debugger_args + ) kwargs.update( { "host": "127.0.0.1", "port": 2828, "app": self.app, "app_args": self.app_args, + "debugger_info": debugger_info, "profile": self.profile, "addons": self.addons, "gecko_log": self.gecko_log,