Debugging
[TOC]
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
Manual debugging via the command line
-
(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
helpinside ZXDB to see what debugger commands are available.
VS Code integration
-
Install the zxdb extension.
-
Modify the
zxdb.commandsetting 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.