It is possible to debug Fuchsia binaries using zxdb
. For the sake of these examples, we will be using base_unittests
as the test suite we wish to execute. These instructions assume that your Chromium build has the following gn arguments:
is_debug = true is_component_build = true target_os = "fuchsia" symbol_level = 2
(From Chromium) Install your package(s) and its symbols onto the device.
out/fuchsia/bin/install_base_unittests --fuchsia-out-dir=/path/to/fuchsia/out/directory
(From Fuchsia source tree) Run the debugger.
fx debug -- --build-dir /path/to/chromium/src/out/directory
Set up the debugger to attach to the process.
[zxdb] attach base_unittests.cmx
Configure breakpoint(s).
[zxdb] break base::GetDefaultJob
(In another terminal, from Fuchsia source tree) Run the test package.
fx shell run fuchsia-pkg://fuchsia.com/base_unittests#meta/base_unittests.cmx
At this point, you should hit a breakpoint in zxdb
.
[zxdb] f ▶ 0 base::GetDefaultJob() • default_job.cc:18 1 base::$anon::LaunchChildTestProcessWithOptions(…) • test_launcher.cc:335 2 base::$anon::DoLaunchChildTestProcess(…) • test_launcher.cc:528 3 base::TestLauncher::LaunchChildGTestProcess(…) • test_launcher.cc:877 ...
Enjoy debugging! Steps 2 through 6 will also work for things like services which aren't run directly from the command line, such as WebEngine. Run help
inside ZXDB to see what debugger commands are available.
Install the zxdb extension.
Modify the zxdb.command
setting in your Chromium workspace to this value:
(cd /path/to/fuchsia ; fx debug -- --enable-debug-adapter --build-dir /path/to/chromium/src/out/directory)
Edit your debug launch configurations in .vscode/launch.json
:
{ "version": "0.2.0", "configurations": [ { "name": "Attach to base_unittests", "type": "zxdb", "request": "attach", "process": "base_unittests.cmx" } ] }
You can add more configurations as needed.
Start the debug configuration in VS Code. You should get a terminal with zxdb running.
Launch the test suite in a terminal.
out/fuchsia/bin/run_base_unittests -d --fuchsia-out-dir=/path/to/fuchsia/out/directory
Breakpoints set in the IDE should work.