blob: 4354d821e095ba53b3c39ceec06f0e3df1541aee [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
Roman Sorokinfaf5ec72022-08-18 09:23:2375To do so, first download both the task's input files (this provides the
76symbols and the symbolizing tools) as well as the task's output results (this
Ben Pastene44862a22020-12-12 00:53:0777provides the crash reports). See the commands listed under the *Reproducing the
78task locally* section on the task page. For example, to download them for
Roman Sorokinfaf5ec72022-08-18 09:23:2379[this task](https://chrome-swarming.appspot.com/task?id=5cc272e0a839b311), `cd`
Ben Pastene44862a22020-12-12 00:53:0780into a tmp directory and run:
81```
Roman Sorokinfaf5ec72022-08-18 09:23:2382cipd install "infra/tools/luci/cas/\${platform}" -root bar
83./bar/cas login
84./bar/cas download -cas-instance projects/chrome-swarming/instances/default_instance -digest 1ad29e201e4ae7e3056a8b17935edbcd62fb54befdfeba221f2e82e54f150c86/812 -dir foo
85
86cipd install "infra/tools/luci/swarming/\${platform}" -root bar
87./bar/swarming login
88./bar/swarming collect -S chrome-swarming.appspot.com -output-dir=foo 5cc272e0a839b311
Ben Pastene44862a22020-12-12 00:53:0789```
90
Roman Sorokinfaf5ec72022-08-18 09:23:2391Once both input and output have been fetched you must then generate the breakpad
Ben Pastene44862a22020-12-12 00:53:0792symbols by pointing the `generate_breakpad_symbols.py` script to the input's
93build dir:
94```
Roman Sorokinfaf5ec72022-08-18 09:23:2395cd foo
96vpython3 components/crash/content/tools/generate_breakpad_symbols.py --symbols-dir symbols --build-dir out/Release/ --binary out/Release/chrome
Ben Pastene44862a22020-12-12 00:53:0797```
98
99That will generate the symbols in the `symbols/` dir. Then to symbolize a Chrome
100crash report present in the task's output (such as
Roman Sorokinfaf5ec72022-08-18 09:23:23101`chrome.20220816.214251.44917.24579.dmp `):
Ben Pastene44862a22020-12-12 00:53:07102```
Roman Sorokinfaf5ec72022-08-18 09:23:23103./out/Release/minidump_stackwalk 5cc272e0a839b311/crashes/chrome.20220816.214251.44917.24579.dmp symbols/
Ben Pastene44862a22020-12-12 00:53:07104```
105
106
Ben Pastene0fed3a72020-11-06 19:25:15107### Running a test locally
108
109To run a Tast test the same way it's ran on Chrome's builders:
110
111- Decide which Chrome OS device type or VM to test on.
112
113- Build Chrome via the [Simple Chrome] workflow for that board.
114
115- Deploy your Chrome to the device via the [deploy_chrome.py] tool.
116
117- Finally, run the Tast test on the device via the `cros_run_test` tool under
118 `//third_party/chromite/bin/`. eg:
Roman Sorokin23397412021-07-12 10:29:09119 `cros_run_test --device $DEVICE_IP --tast login.Chrome`. See [here] for more
Ben Pastene0fed3a72020-11-06 19:25:15120 info on cros_run_test.
121
Ben Pasteneb30c66e92019-08-30 23:25:10122## Telemetry
123
124>TODO: Add instructions for debugging telemetry failures.
125
126## GTest
127
128>TODO: Add instructions for debugging GTest failures.
129
130## Rerunning these tests locally
131
132>TODO: Add instructions for rerunning these tests locally.
133
134
Ben Pastene43271182021-04-30 19:57:07135[linux-chromeos]: https://chromium.googlesource.com/chromium/src/+/HEAD/docs/chromeos_build_instructions.md
Ben Pasteneb30c66e92019-08-30 23:25:10136[Tast]: https://chromium.googlesource.com/chromiumos/platform/tast/+/HEAD/README.md
Ben Pastenef8d68122021-09-20 22:49:10137[failed build]: https://ci.chromium.org/ui/p/chromium/builders/ci/chromeos-kevin-rel/37300/test-results
138[Chrome probably crashed]: https://luci-milo.appspot.com/ui/inv/build-8835572137562508161/test-results?q=example.ChromeFixture
139[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:07140[attribute]: https://chromium.googlesource.com/chromiumos/platform/tast/+/HEAD/docs/test_attributes.md
Nicholas Vernef4b763052021-01-27 04:08:05141[this list]: https://codesearch.chromium.org/chromium/src/chromeos/tast_control.gni
Ben Pastene43271182021-04-30 19:57:07142[Chrome uprev]: https://chromium.googlesource.com/chromiumos/docs/+/HEAD/chrome_commit_pipeline.md#the-chrome-os-commit-pipeline-for-chrome-changes
143[Simple Chrome]: https://chromium.googlesource.com/chromiumos/docs/+/HEAD/simple_chrome_workflow.md
144[deploy_chrome.py]: https://chromium.googlesource.com/chromiumos/docs/+/HEAD/simple_chrome_workflow.md#Deploying-Chrome-to-the-device
145[here]: https://chromium.googlesource.com/chromiumos/docs/+/HEAD/cros_vm.md#in-simple-chrome