Crash Analysis¶
When running on Windows, Chatterino will automatically save information about a crash in a minidump.
Crashdumps are saved inside the Crashes/reports
folder in your Chatterino folder.
Minidumps contain the stacks of all threads, their state (registers), the exception associated with the crash, and some metadata about the CPU and the OS. If you are unsure if your crashdump contains sensitive information, ask a Chatterino developer on the Discord server.
There are several ways of analyzing crashes. To get started, you need to have a symbol (PDB) file for your installation. These files are unique per build meaning that you need to download the file (this is especially important when using nightly builds). For GitHub builds, you can find the PDB file in the release - it's zipped in an archive ending in .pdb.7z
. For simplicity, extract the .pdb
to the location of your chatterino.exe
.
WinDbg¶
For analyzing with a GUI, install WinDbg. After the installation, you should be able to open the crashdumps (.dmp
files) right from the Windows Explorer. By default, you won't get much information.
To add names to functions (symbols), open the settings (Home > Settings), go to Debugging Settings, and add the directory you extracted your symbol file to the Symbol path. If there's no srv*
entry, consider adding one - this will try to load symbols from servers for system libraries.
To add source-files, clone the repository and checkout the source-tree at the version of your executable. Then add this path to Source Path in the Debugging Settings.
Note: You might need to reload your window to have your changes be picked up.
Example Settings
minidump-stackwalk¶
If you want to use the terminal or don't have a Windows machine, you can use minidump-stackwalk
. Install minidump-stackwalk
and dump_syms
with cargo (installation): cargo install <app>
.
First, you need to generate a symbol-store from the PDB file with dump_syms
:
- This can be any folder you want. Symbols will be extracted here.
After you dumped the symbols, run:
Since Chatterino has quite a few threads, the output will be long. Most of the time, you're interested in the first thread (GUI thread) since it's the crashing thread.