Skip to content

Commit

Permalink
Add instructions for symbolizing crashes with container
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewsavage1 committed May 17, 2024
1 parent eddf186 commit fbc50ff
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 5 deletions.
1 change: 1 addition & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ services:
crashpad-symbolize:
build:
args:
- MINIDUMP_PATH
- GITHUB_TAG=${GITHUB_TAG:-23.lts.5}
- ARCHITECTURE=${ARCHITECTURE:-x64}
- SB_API_VERSION=${SB_API_VERSION:-14}
Expand Down
1 change: 1 addition & 0 deletions docker/crashpad_symbolize/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,5 @@ RUN libcobalt_path=$(find /tmp/cobalt-evergreen-snapshot/ -name "libcobalt.so")
&& mkdir -p /tmp/symbols/libcobalt.so/$debug_id/ \
&& mv /tmp/libcobalt.so.sym /tmp/symbols/libcobalt.so/$debug_id/

ARG MINIDUMP_PATH
CMD breakpad/src/src/processor/minidump_stackwalk ${MINIDUMP_PATH} /tmp/symbols
35 changes: 30 additions & 5 deletions starboard/doc/evergreen/symbolizing_minidumps.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,41 @@ debugging, as these minidumps have the information for the dynamic
`libcobalt.so` module correctly mapped, which a out-of-the-box dumper could not
manage.

## Obtaining the Tools to Symbolize Minidumps
## Symbolizing with the Provided Docker Container (Recommended)

We provide a docker container at `docker/crashpad_symbolize/Dockerfile` with a
corresponding docker-compose service, `crashpad-symbolize`, with which you can
symbolize your minidumps.

Build and run the container with:

```
MINIDUMP_PATH=/path/to/minidump_file docker-compose up --build crashpad-symbolize
```

Where `MINIDUMP_PATH` is the path to your minidump file. The service will also
pick up environment values for `GITHUB_TAG`, `ARCHITECTURE`, `SB_API_VERSION`,
and `CONFIG`, so ensure these are correct.

* `GITHUB_TAG`: A Cobalt version with an associated release, i.e. 23.lts.5
* `ARCHITECTURE`: One of `x64`, `x86`, `arm64`, `arm-hardfp`, or `arm-softfp`
* `SB_API_VERSION`: The Starboard version, i.e. `15`
* `CONFIG`: One of `release`, `qa`, or `debug`

## Symbolizing Locally

If you wish, you can download all the necessary tools to locally symbolize
minidumps. This is more work than doing it with the docker container.

### Obtaining the Tools to Symbolize Minidumps

Tools for symbolizing these dumps are available through
[Breakpad](https://chromium.googlesource.com/breakpad/breakpad/). Breakpad is
an open source crash reporting library that we use to obtain symbol files
(`.sym`) from unstripped binaries, and to process the symbol files with the
minidumps to produce human-readable stacktraces.


### Building Breakpad
#### Building Breakpad

[Breakpad](https://chromium.googlesource.com/breakpad/breakpad/) provides
instructions for building these tools yourself. The
Expand Down Expand Up @@ -51,7 +76,7 @@ building on Linux it will also build the `dump_syms` tool
depot_tools from your `$PATH` environment variable, as it can conflict with
Cobalt's depot_tools.

## Symbolizing Minidumps
### Symbolizing Minidumps

Now that you have all the tools you need, we can symbolize the dumps. To be
able to symbolize Cobalt using Evergreen, you need to be get the unstripped
Expand Down Expand Up @@ -97,7 +122,7 @@ $ /path/to/minidump_stackwalk /path/to/your/minidump.dmp symbols/
`minidump_stackwalk` produces verbose output on stderr, and the stacktrace on
stdout, so you may want to redirect stderr.

### Addendum: Adding Other Symbols
#### Addendum: Adding Other Symbols

We can use the process above to add symbols for any library or executable you
use, not just `libcobalt.so`. To do this, all you have to do is run the
Expand Down

0 comments on commit fbc50ff

Please sign in to comment.