blob: 9cc3892acc8f08467ea69b039b04e925873a5da3 [file] [log] [blame] [view]
# Chrome OS Debugging Instructions
Chrome on Chrome OS is tested using a handful of frameworks, each of which
you'll find running on Chrome's CQ and waterfalls. If you're investigating
failures in these tests, below are some tips for debugging and identifying the
cause.
*** note
This doc outlines tests running in true Chrome OS environments (ie: on virtual
machines or real devices). [linux-chromeos] tests, on the other hand, can be
debugged like any other linux test.
***
## Tast
[Tast] is Chrome OS's integration testing framework. Since Chrome itself is
instrumental to the Chrome OS system, it's equally important that we run some
of these integration tests on Chrome's waterfalls. If you find one of these
tests failing (likely in the `chrome_all_tast_tests` step), you can:
- **Inspect the failed test's log snippet**: There should be a log link for
each failed test with failure information. eg: For this [failed build], opening
the [ui.WindowControl] log link contains stack traces and error messages.
- **View browser & system logs**: A common cause of failure on Chrome's builders
are browser crashes. When this happens, each test's log snippets will simply
contain warnings like "[Chrome probably crashed]". To debug these crashes,
navigate to the test's Isolated output, listed in the build under the test
step's [shard #0 isolated out] link. There you'll find expanded logs for every
test. For example, the [tests/ui.WindowControl/messages] log has more info
than its earlier snippet. Additionally, you can find system logs under
the `system_logs/` prefix. To find a system log for a particular test, match
the timestamps printed in the test's log with the timestamps present in the
system log filename. For instance, the previous `ui.WindowControl` failure
matches the [system_logs/chrome/chrome_20201029-195153] browser log, which
contains the culprit Chrome crash and backtrace.
- **Symbolizing a browser crash dump**: See [below](#symbolizing-a-crash-dump).
### Disabling a test
There a couple ways to disable a test on Chrome's builders:
- **With a full CrOS checkout**: If you have a full CrOS checkout, you can add
the `informational` attribute to the test's definition (see [Tast attributes]
for more info). This can take time (ie: many hours) to land and propagate onto
Chrome's builders. So if you need the test disabled ASAP, consult the next
option.
- **With only a Chromium checkout**: You can also add the test to the list of
disabled tests for the step's GN target. For example, to disable a test in the
`chrome_all_tast_tests` step, add it to [this list].
In both cases, please make sure a bug is filed for the test, and route it to
the appropriate owners.
### Symbolizing a crash dump
If a test fails due to a browser crash, there should be a Minidump crash report
present in the test's isolated out under the prefix `crashes/chrome...`. These
reports aren't very useful by themselves, but with a few commands you can
symbolize the report locally to get insight into what conditions caused Chrome
to crash.
To do so, first download both the task's input isolate (this provides the
symbols and the symbolizing tools) as well as the task's output isolate (this
provides the crash reports). See the commands listed under the *Reproducing the
task locally* section on the task page. For example, to download them for
[this task](https://chrome-swarming.appspot.com/task?id=506a01dd12c8a610), `cd`
into a tmp directory and run:
```
$CHROME_DIR/tools/luci-go/isolated download -I https://chrome-isolated.appspot.com --namespace default-gzip -isolated 64919fee8b02d826df2401544a9dc0f7dfa2172d -output-dir input
python $CHROME_DIR/tools/swarming_client/swarming.py collect -S chrome-swarming.appspot.com 506a01dd12c8a610 --task-output-dir output
```
Once both isolates have been fetched you must then generate the breakpad
symbols by pointing the `generate_breakpad_symbols.py` script to the input's
build dir:
```
python input/components/crash/content/tools/generate_breakpad_symbols.py --symbols-dir symbols --build-dir input/out/Release/ --binary input/out/Release/chrome
```
That will generate the symbols in the `symbols/` dir. Then to symbolize a Chrome
crash report present in the task's output (such as
`chrome.20201211.041043.31022.5747.dmp`):
```
./input/out/Release/minidump_stackwalk output/0/crashes/chrome.20201211.041043.31022.5747.dmp symbols/
```
### Running a test locally
To run a Tast test the same way it's ran on Chrome's builders:
- Decide which Chrome OS device type or VM to test on.
- Build Chrome via the [Simple Chrome] workflow for that board.
- Deploy your Chrome to the device via the [deploy_chrome.py] tool.
- Finally, run the Tast test on the device via the `cros_run_test` tool under
`//third_party/chromite/bin/`. eg:
`cros_run_test --device $DEVICE_IP --tast ui.ChromeLogin`. See [here] for more
info on cros_run_test.
## Telemetry
>TODO: Add instructions for debugging telemetry failures.
## GTest
>TODO: Add instructions for debugging GTest failures.
## Rerunning these tests locally
>TODO: Add instructions for rerunning these tests locally.
[linux-chromeos]: https://chromium.googlesource.com/chromium/src/+/master/docs/chromeos_build_instructions.md
[Tast]: https://chromium.googlesource.com/chromiumos/platform/tast/+/HEAD/README.md
[failed build]: https://ci.chromium.org/p/chromium/builders/ci/chromeos-kevin-rel/29791
[ui.WindowControl]: https://logs.chromium.org/logs/chromium/buildbucket/cr-buildbucket.appspot.com/8865053459542681936/+/steps/chrome_all_tast_tests_on_ChromeOS/0/logs/Deterministic_failure:_ui.WindowControl__status_FAILURE_/0
[Chrome probably crashed]: https://logs.chromium.org/logs/chromium/buildbucket/cr-buildbucket.appspot.com/8905974915785988832/+/steps/chrome_all_tast_tests__retry_shards_with_patch__on_ChromeOS/0/logs/Deterministic_failure:_ui.ChromeLogin__status_FAILURE_/0
[shard #0 isolated out]: https://isolateserver.appspot.com/browse?namespace=default-gzip&hash=3d35c273195f640c69b1cf0d15d19d9868e3f593
[tests/ui.WindowControl/messages]: https://isolateserver.appspot.com/browse?namespace=default-gzip&digest=baefbcfd24c02b3ada4617d259dc6b4220b413b9&as=messages
[system_logs/chrome/chrome_20201029-195153]: https://isolateserver.appspot.com/browse?namespace=default-gzip&digest=272166c85f190c336a9885f0267cbdea912e31da&as=chrome_20201029-195153
[Tast attributes]: https://chromium.googlesource.com/chromiumos/platform/tast/+/HEAD/docs/test_attributes.md
[this list]: https://codesearch.chromium.org/chromium/src/chromeos/tast_control.gni
[Simple Chrome]: https://chromium.googlesource.com/chromiumos/docs/+/master/simple_chrome_workflow.md
[deploy_chrome.py]: https://chromium.googlesource.com/chromiumos/docs/+/master/simple_chrome_workflow.md#Deploying-Chrome-to-the-device
[here]: https://chromium.googlesource.com/chromiumos/docs/+/master/cros_vm.md#in-simple-chrome