This document outlines how to symbolize crashes and backtraces in Zircon.
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
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):
make -j $JOBS USE_ASAN=true
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
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.