Looking Glass is a built-in debugger and inspector tool that makes it possible to run arbitrary JS code inside the shell, visually select any object from the shell's scene, and much more.
It can be accessed by entering lg
into the run dialog (Alt+F2).
gnome-shell is split between C and JavaScript. It is sometimes necessary to debug the interaction between the two, for example when javascript code triggers a warning or crash on the C side.
In gdb, the javascript stacktrace can be printed with
<gdb> gjs_dumpstack()
The SHELL_DEBUG
environment variable can be used to print
the javascript stack automatically:
backtrace-warning
: when a warning is loggedbacktrace-segfault
: on segfaults
To log a stacktrace when some particular javascript code is reached, you can insert the following code:
console.trace('trace from doSomething()')
It is possible to attach gdb to the gnome-shell process of the existing login session (or with the native backend on a tty), but beware: When the debugger stops the gnome-shell process, the entire session will freeze.
It is necessary to use a second system to continue controlling the debugger, most conveniently in combination with screen:
- create a screen session
- detach the session
- ssh from a second system
- resume the screen session
- attach gdb to the gnome-shell process