Symbolizer

This document outlines how to symbolize crashes and backtraces in Zircon.

Overview

If you have some text that contains the required information, you can symbolize that text by piping it into ./scripts/symbolize. You can run ./scripts/symbolize -h to see how to use it.

If you use loglistener on x64, this is quite simple. You can simply pipe directly into symbolize.

loglistener | ./scripts/symbolize

You can use the standard flags found in other scripts in Zircon to specify other builds than build-x64. For instance, if you want to symbolize an arm64 build that was built with Clang you can run the following:

loglistener | ./scripts/symbolize -a arm64 -C

If you‘re familiar with what ids.txt is, and you know what you’re doing you can also specify ids.txt directly.

loglistener | ./scripts/symbolize build-arm64-asan/ids.txt

ASan with QEMU Example

For a slightly more involved case we'll consider a complete workflow to compile and symbolize an ASan crash.

First build (you can use ./scripts/build-zircon-x86 -A as well):

gn gen build-zircon --args='variants=["asan"]'

Now you‘ll want to run this on QEMU, but if you just run it directly you’ll be stuck copy pasting the output into a file. You can use tee to solve this:

./scripts/run-zircon-x86 -A | tee ~/log.txt

This will create a log.txt file in your home directory (feel free to place it anywhere) that will contain all output from your QEMU run. While QEMU is running, we'll need to create a crash. To get a handy ASan crash result we can use crasher

$ crasher use_after_free

Now just pipe the output thought the symbolizer

./scripts/symbolize -A < ~/log.txt

TODO(TC-283): Remove this after TC-283 is solved.

You might be wondering if you can just pipe QEMU directly into the symbolizer. Right now this won't cause an error but it is not really usable because the symbolizer buffers on a line by line basis. This may be possible in the future.