blob: 662980476352756776121b57bea1037dcfc18864 [file] [log] [blame] [view]
Ben Pasteneb30c66e92019-08-30 23:25:101# Chrome OS Debugging Instructions
2Chrome on Chrome OS is tested using a handful of frameworks, each of which
3you'll find running on Chrome's CQ and waterfalls. If you're investigating
4failures in these tests, below are some tips for debugging and identifying the
5cause.
6
7*** note
8
9This doc outlines tests running in true Chrome OS environments (ie: on virtual
10machines or real devices). [linux-chromeos] tests, on the other hand, can be
11debugged like any other linux test.
12***
13
14## Tast
15
16[Tast] is Chrome OS's integration testing framework. Since Chrome itself is
17instrumental to the Chrome OS system, it's equally important that we run some
18of these integration tests on Chrome's waterfalls. If you find one of these
19tests failing (likely in the `chrome_all_tast_tests` step), you can:
20
Ben Pastenef8d68122021-09-20 22:49:1021- **Inspect the failed test's log snippet**: There should be a log snippet for
22each failed test in the `Test Results` tab in the build UI. eg: For this
23[failed build], clicking on the `policy.IncognitoModeAvailability` expands to
24include stack traces and error messages.
Ben Pasteneb30c66e92019-08-30 23:25:1025
26- **View browser & system logs**: A common cause of failure on Chrome's builders
27are browser crashes. When this happens, each test's log snippets will simply
28contain warnings like "[Chrome probably crashed]". To debug these crashes,
Ben Pastenef8d68122021-09-20 22:49:1029expand the list of attached artifacts for the test by clicking the `Artifacts`
30link under the failed test in the `Test Results` tab. There you'll find an
31extended log for the test under `log.txt`. Additionally, you can find system
32logs included in that list. To find a system log for a particular test, match
Ben Pastene0fed3a72020-11-06 19:25:1533the timestamps printed in the test's log with the timestamps present in the
Ben Pastenef8d68122021-09-20 22:49:1034system log filename. For instance, the previous `example.ChromeFixture` failure
35matches the [chrome/chrome_20210920-051805] browser log, which contains the
36culprit Chrome crash and backtrace.
Ben Pastene0fed3a72020-11-06 19:25:1537
Ben Pastene44862a22020-12-12 00:53:0738- **Symbolizing a browser crash dump**: See [below](#symbolizing-a-crash-dump).
39
Ben Pastene0fed3a72020-11-06 19:25:1540### Disabling a test
Ben Pasteneb30c66e92019-08-30 23:25:1041
Timothy Loheb761b02022-06-06 01:46:1242If you are a Chrome Sheriff, please read the sheriff documentation
43[here](http://go/chrome-sheriff-tast) before disabling any tests.
44
45Tast tests are run under both Chrome's builders and CrOS's builders. They can be
46disabled either completely (in all builders), or in Chrome's builders alone. The
47latter should be used only for changes which are not expected to occur on CrOS's
48builders.
49
50- **Disabling in all builders**: If you have a full CrOS checkout, you can add
Ben Pastene43271182021-04-30 19:57:0751the `informational` [attribute] to the test's definition. (You may be able to
52bypass the need for a full CrOS checkout by using the `Edit code` button in
53codesearch UI, but this flow is unverified.) This can take time (ie: many hours)
54to land and propagate onto Chrome's builders. So if you need the test disabled
55ASAP, consult the next option.
Timothy Loheb761b02022-06-06 01:46:1256- **Disabling in only Chrome's builders**: You can add the test to the list of
Ben Pasteneb30c66e92019-08-30 23:25:1057disabled tests for the step's GN target. For example, to disable a test in the
Ben Pastene43271182021-04-30 19:57:0758`chrome_all_tast_tests` step, add it to [this list]. **Note**: If the test is
59failing consistently, and you only disable it here, it will likely start to fail
60in the next [Chrome uprev] on CrOS's builders, which can lead to further
61problems down the road. So please make sure you pursue the first option as well
62in that case.
Ben Pasteneb30c66e92019-08-30 23:25:1063
Ben Pastene48021b42020-04-21 19:18:4664In both cases, please make sure a bug is filed for the test, and route it to
65the appropriate owners.
66
Ben Pastene44862a22020-12-12 00:53:0767### Symbolizing a crash dump
68
69If a test fails due to a browser crash, there should be a Minidump crash report
70present in the test's isolated out under the prefix `crashes/chrome...`. These
71reports aren't very useful by themselves, but with a few commands you can
72symbolize the report locally to get insight into what conditions caused Chrome
73to crash.
74
Joel Hockeyf5f032d2024-02-16 00:03:3975If you are running a locally compiled [Simple Chrome] binary on a device or VM,
76you can can build `minidump_stackwalk` and download the
77`/home/chronos/crash/chrome*.dmp` file.
78```
79autoninja -C out/Release minidump_stackwalk dump_syms
80
81rsync -r -e "ssh -p 9222" root@localhost:/home/chronos/crash /tmp
82```
83
84For a crash on a bot, download both the task's input files (this provides the
Roman Sorokinfaf5ec72022-08-18 09:23:2385symbols and the symbolizing tools) as well as the task's output results (this
Ben Pastene44862a22020-12-12 00:53:0786provides the crash reports). See the commands listed under the *Reproducing the
87task locally* section on the task page. For example, to download them for
Roman Sorokinfaf5ec72022-08-18 09:23:2388[this task](https://chrome-swarming.appspot.com/task?id=5cc272e0a839b311), `cd`
Ben Pastene44862a22020-12-12 00:53:0789into a tmp directory and run:
90```
Roman Sorokinfaf5ec72022-08-18 09:23:2391cipd install "infra/tools/luci/cas/\${platform}" -root bar
92./bar/cas login
93./bar/cas download -cas-instance projects/chrome-swarming/instances/default_instance -digest 1ad29e201e4ae7e3056a8b17935edbcd62fb54befdfeba221f2e82e54f150c86/812 -dir foo
94
95cipd install "infra/tools/luci/swarming/\${platform}" -root bar
96./bar/swarming login
97./bar/swarming collect -S chrome-swarming.appspot.com -output-dir=foo 5cc272e0a839b311
Ben Pastene44862a22020-12-12 00:53:0798```
99
Joel Hockeyf5f032d2024-02-16 00:03:39100Generate the breakpad symbols by pointing the `generate_breakpad_symbols.py` script to
101your local binary, or the downloaded input build dir:
Ben Pastene44862a22020-12-12 00:53:07102```
Roman Sorokinfaf5ec72022-08-18 09:23:23103cd foo
Joel Hockeyf5f032d2024-02-16 00:03:39104vpython3 components/crash/content/tools/generate_breakpad_symbols.py --symbols-dir symbols --build-dir out/Release/ --binary out/Release/chrome --platform chromeos
Ben Pastene44862a22020-12-12 00:53:07105```
106
107That will generate the symbols in the `symbols/` dir. Then to symbolize a Chrome
Joel Hockeyf5f032d2024-02-16 00:03:39108crash report (either in the tasks's output, or the `/tmp/crash` dir):
Ben Pastene44862a22020-12-12 00:53:07109```
Roman Sorokinfaf5ec72022-08-18 09:23:23110./out/Release/minidump_stackwalk 5cc272e0a839b311/crashes/chrome.20220816.214251.44917.24579.dmp symbols/
Ben Pastene44862a22020-12-12 00:53:07111```
112
113
Ben Pastene0fed3a72020-11-06 19:25:15114### Running a test locally
115
116To run a Tast test the same way it's ran on Chrome's builders:
117
118- Decide which Chrome OS device type or VM to test on.
119
120- Build Chrome via the [Simple Chrome] workflow for that board.
121
122- Deploy your Chrome to the device via the [deploy_chrome.py] tool.
123
124- Finally, run the Tast test on the device via the `cros_run_test` tool under
125 `//third_party/chromite/bin/`. eg:
Roman Sorokin23397412021-07-12 10:29:09126 `cros_run_test --device $DEVICE_IP --tast login.Chrome`. See [here] for more
Ben Pastene0fed3a72020-11-06 19:25:15127 info on cros_run_test.
128
Ben Pasteneb30c66e92019-08-30 23:25:10129## Telemetry
130
131>TODO: Add instructions for debugging telemetry failures.
132
133## GTest
134
135>TODO: Add instructions for debugging GTest failures.
136
137## Rerunning these tests locally
138
139>TODO: Add instructions for rerunning these tests locally.
140
141
Ben Pastene43271182021-04-30 19:57:07142[linux-chromeos]: https://chromium.googlesource.com/chromium/src/+/HEAD/docs/chromeos_build_instructions.md
Ben Pasteneb30c66e92019-08-30 23:25:10143[Tast]: https://chromium.googlesource.com/chromiumos/platform/tast/+/HEAD/README.md
Ben Pastenef8d68122021-09-20 22:49:10144[failed build]: https://ci.chromium.org/ui/p/chromium/builders/ci/chromeos-kevin-rel/37300/test-results
145[Chrome probably crashed]: https://luci-milo.appspot.com/ui/inv/build-8835572137562508161/test-results?q=example.ChromeFixture
146[chrome/chrome_20210920-051805]: https://luci-milo.appspot.com/ui/artifact/raw/invocations/task-chromium-swarm.appspot.com-561bed66572a9411/artifacts/chrome%2Fchrome_20210920-051805
Ben Pastene43271182021-04-30 19:57:07147[attribute]: https://chromium.googlesource.com/chromiumos/platform/tast/+/HEAD/docs/test_attributes.md
Nicholas Vernef4b763052021-01-27 04:08:05148[this list]: https://codesearch.chromium.org/chromium/src/chromeos/tast_control.gni
Ben Pastene43271182021-04-30 19:57:07149[Chrome uprev]: https://chromium.googlesource.com/chromiumos/docs/+/HEAD/chrome_commit_pipeline.md#the-chrome-os-commit-pipeline-for-chrome-changes
150[Simple Chrome]: https://chromium.googlesource.com/chromiumos/docs/+/HEAD/simple_chrome_workflow.md
151[deploy_chrome.py]: https://chromium.googlesource.com/chromiumos/docs/+/HEAD/simple_chrome_workflow.md#Deploying-Chrome-to-the-device
152[here]: https://chromium.googlesource.com/chromiumos/docs/+/HEAD/cros_vm.md#in-simple-chrome