# Debugging Firefox with Pernosco This page is intended to help Firefox/Gecko developers get started using [Pernosco](https://pernos.co/) to debug Firefox. Mozilla employees have a paid subscription to Pernosco, and are encouraged to use it. Contributors can use Pernosco as well. [A free account](https://pernos.co/pricing/) comes with 5 uploads to see if it is suitable for your workflow. ## Prerequisites - You need the ability to produce an {code}`rr` trace. See {doc}`debugging_firefox_with_rr` - Employees, you can also generate traces for Pernosco for some CI job failures via Treeherder. ## Workflow At a high level, working with Pernosco consists of recording a trace then uploading the trace for processing. ### Install your Pernosco configuration If you are using your own Pernoso account, follow the instructions [here](https://pernos.co/account) to install your credentials. Mozilla employees, see the [Pernosco install and configuration doc](https://docs.google.com/document/d/1cb-mkNyJYMudpS0a-R6zxy0kOMIRUSKrxxL-E9zFGKE/edit) for credentials. In general, you will want: - Your email in {code}`~/.config/pernosco/user` - Your group in {code}`~/.config/pernosco/group` - Your key in {code}`~/.config/pernosco/user_secret_key` ### Gather a Local Trace In general, to gather a trace follow the instruction for recording {code}`rr` traces in {doc}`debugging_firefox_with_rr`. However, to gather a local rr trace that’s compatible with Pernosco you need to disable some incompatible CPU features (currently only AVX-512) On an Intel machine, you can disable this at the command line. To simplify things a shell script {code}`pernosco-record` can be created like so, ```bash #!/bin/bash rr record --disable-avx-512 "$@" ``` replacing plain {code}`rr` in command lines ({code}`mach --debugger pernosco-record`) On AMD Zen Machines, you can disable AVX-512 and 5 level page tables at boot. On a Debian derived distro this involves editing {code}`/etc/default/grub` and adding {code}`clearcpuid=304,no5lvl` to {code}`GRUB_CMDLINE_LINUX_DEFAULT`, then running {code}`sudo update-grub` after. ### Upload the trace Find the trace you’re interested in {code}`~/.local/share/rr/`, and call {code}`pernosco-submit` ```bash pernosco-submit upload ~/.local/share/rr/ PATH_TO_CENTRAL --title "Name Of Trace" ``` where {code}`PATH TO CENTRAL` is the path to the source of your build, checked out to the revision matching the build. The last trace recorded is always symlinked, so you can use {code}`~/.local/share/rr/latest-trace` too. ### Wait for email After the trace is processed, you'll get an email with a link to your trace. Good hunting! ## Treeherder Workflow You can also try to get traces generated via the Treeherder interface. On a failing test that is eligible, in "Artifacts and Debugging Tools", you'll see a link to ```{image} ../img/record-this-failure.png :width: 35 % ``` This link brings you to the self-service reproducer: ```{image} ../img/self-service.png :width: 60 % ``` Select a test and a count, and whether or not chaos-mode should be used, then click reproduce. At this point there is a **long** wait; the page will notify you when reproduction has started with an {code}`alert` dialog.