Debugging egmde

Notes from a debug session

I know this information exists in various places, and I remember most of it. But one day I’ll need a reminder and this is one place for quick reference.

The situation was “when using X-forwarding from a multipass VM egmde segfaults on exit” so I wanted egmde, with debug symbols running in a multipass VM. Because these VMs are pretty “bare bones” there’s a load of dependencies missing that would be on my normal desktop. The recipe for setting those up is what follows.

Setting up the VM

multipass launch -n bug-1938
multipass-enable-ssh bug-1938
multipass-ssh-X bug-1938

This provides a console with access to X11 on the host system (which will be needed later). The rest of these notes are about instructions run from that session.

The build dependencies

sudo apt-add-repository ppa:mir-team/release
sudo apt install pkg-config devscripts equivs git cmake
sudo apt install libmiral-dev libfreetype6-dev libwayland-dev libboost-filesystem-dev

Surprisingly I didn’t need g++, although that’s also a dependency.

This allowed me to checkout and build egmde:

git clone
mkdir egmde/build
cd egmde/build
cmake ..

Runtime dependencies

In addition to the above, the following runtime dependencies are needed:

sudo apt install mir-graphics-drivers-desktop libgl1-mesa-dri fonts-freefont-ttf

This allows egmde to run on the host desktop.

gdb -ex run egmde

Debug symbols

The Ubuntu Wiki for Debug Symbol Packages gives a handy script for adding debug repositories:

echo "deb $(lsb_release -cs) main restricted universe multiverse
deb $(lsb_release -cs)-updates main restricted universe multiverse
deb $(lsb_release -cs)-proposed main restricted universe multiverse" | \
sudo tee -a /etc/apt/sources.list.d/ddebs.list

But this only deals with the main archives, not the Mir ppa.

For that we need to edit /etc/apt/sources.list.d/mir-team-ubuntu-release-focal.list and change:

deb focal main
# deb-src focal main


deb focal main
deb focal main/debug
deb-src focal main

Next we need to figure out the symbol packages we need. There’s a handy script mentioned on that page:

apt install debian-goodies
find-dbgsym-packages [core_path|running_pid|binary_path]

And running find-dbgsym-packages egmde provides a helpful list of packages to be pasted onto sudo apt install.

Source package

As the problem I was hunting turned out to be in the egmde code I didn’t get around to loading any source packages, so that is left as an exercise for my future self. (Hint apt source libmiral-dev will get the Mir source.)