I’m developing a small GTK4 application in a Flatpak version of Gnome Builder, and trying to detect leaks using Valgrind from the Run button. When I get the report, it suggests adding the extra --leak-check=full option to the command, but I couldn’t find where could I modify the run command or add flags.
Note, that I’m developing this GTK4 app on an Ubuntu LTS with GTK3, so if I just try to run the built executable, it won’t be able to find the GTK4 libraries.
Question:
How can I add the --leak-check=full option to the Valgrind run command in Gnome Builder?
Or how can I run Valgrind from any command line so that it respects the GTK4 runtime of the flatpak binary?
You can run a new build terminal with SHIFT + CTRL + ALT +T then you would be inside the locale flatpak repository that was created for your application. This should allow you to run valgrind yourself
Thank you for your response. When I open the terminal with that hotkey, it opens a terminal in my home folder (~/). I can run valgrind, but there’s no executable binary. Even locate doesn’t tell me where is the executable. Unfortunately I cannot use valgrind without the executable.
OK, I’ve found the executable in ~/.var/app/org.gnome.Builder/cache/gnome-builder/projects/fluidapp/builds/de.teamaux.Fluidapp.json-flatpak-org.gnome.Platform-42-x86_64-master/src, but this terminal just doesn’t seem to respect the flatpak dependencies, and complaining on the lack of the gtk4 libraries as any other terminal:
./fluidapp: error while loading shared libraries: libgtk-4.so.1: cannot open shared object file: No such file or directory
Note that the terminal will set $BUILDDIR to the build directory for you. So you can just cd $BUILDDIR after opening the terminal.
Most likely you’re running the binary from the build directory which probably doesn’t have finalized link paths setup yet (I think Meson does that as part of installation).
Builder has a “hidden” feature that lets you install your project (so it will be in /app/bin) which you should run instead of the binary from the build directory. Ctrl+Enter then type install and press Enter again to install the project. You can also go to the build panel (middle panel on the left sidebar) and then expand the Build Details expander, and click on the “install” row.
At that point, you can just do valgrind --leak-check=full --track-origins=yes /app/bin/foobar
Thank you for the hints. In theory that would suffice, and I’d be happy. In reality however install doesn’t install my app in /app/bin, and $BUILDDIR is empty, so cd $BUILDDIR just leads to ~/.
Here’s the output (it looks OK):
flatpak build --env=LANG=hu_HU.UTF-8 --env=USER=vezir --env=HOME=/home/vezir --env=PATH=/usr/bin:/bin --env=TERM=xterm-256color --env=V=0 --env=CCACHE_DIR=/home/vezir/.var/app/org.gnome.Builder/cache/gnome-builder/flatpak-builder/ccache --env=FLATPAK_CONFIG_DIR=/home/vezir/.var/app/org.gnome.Builder/data/gnome-builder/flatpak/etc --env=PATH=/app/bin:/usr/bin --env=G_MESSAGES_DEBUG= --env=XDG_RUNTIME_DIR=/run/user/1000 --build-dir=/home/vezir/.var/app/org.gnome.Builder/cache/gnome-builder/projects/fluidapp/builds/de.teamaux.Fluidapp.json-flatpak-org.gnome.Platform-41-x86_64-master --share=network --nofilesystem=host --filesystem=/home/vezir/.var/app/org.gnome.Builder/cache/gnome-builder --filesystem=/home/vezir/Projects/fluidapp --filesystem=/home/vezir/.var/app/org.gnome.Builder/cache/gnome-builder/projects/fluidapp/builds/de.teamaux.Fluidapp.json-flatpak-org.gnome.Platform-41-x86_64-master --env=NOCONFIGURE=1 /home/vezir/.var/app/org.gnome.Builder/cache/gnome-builder/projects/fluidapp/flatpak/staging/x86_64-master ninja
ninja: no work to do.
flatpak build --env=TERM=xterm-256color --env=V=0 --env=CCACHE_DIR=/home/vezir/.var/app/org.gnome.Builder/cache/gnome-builder/flatpak-builder/ccache --env=FLATPAK_CONFIG_DIR=/home/vezir/.var/app/org.gnome.Builder/data/gnome-builder/flatpak/etc --env=PATH=/app/bin:/usr/bin --env=G_MESSAGES_DEBUG= --env=XDG_RUNTIME_DIR=/run/user/1000 --build-dir=/home/vezir/.var/app/org.gnome.Builder/cache/gnome-builder/projects/fluidapp/builds/de.teamaux.Fluidapp.json-flatpak-org.gnome.Platform-41-x86_64-master --share=network --nofilesystem=host --filesystem=/home/vezir/.var/app/org.gnome.Builder/cache/gnome-builder --filesystem=/home/vezir/Projects/fluidapp --filesystem=/home/vezir/.var/app/org.gnome.Builder/cache/gnome-builder/projects/fluidapp/builds/de.teamaux.Fluidapp.json-flatpak-org.gnome.Platform-41-x86_64-master --env=NOCONFIGURE=1 /home/vezir/.var/app/org.gnome.Builder/cache/gnome-builder/projects/fluidapp/flatpak/staging/x86_64-master ninja install
[0/1] Installing files.
Installing data/de.teamaux.Fluidapp.desktop to /app/share/applications
Installing data/de.teamaux.Fluidapp.appdata.xml to /app/share/appdata
Installing src/fluidapp to /app/bin
Installing /home/vezir/Projects/fluidapp/data/de.teamaux.Fluidapp.gschema.xml to /app/share/glib-2.0/schemas
Installing /home/vezir/Projects/fluidapp/data/icons/hicolor/scalable/apps/de.teamaux.Fluidapp.svg to /app/share/icons/hicolor/scalable/apps
Installing /home/vezir/Projects/fluidapp/data/icons/hicolor/symbolic/apps/de.teamaux.Fluidapp-symbolic.svg to /app/share/icons/hicolor/symbolic/apps
Running custom install script '/usr/bin/meson --internal gettext install --subdir=po --localedir=share/locale --pkgname=fluidapp'
Running custom install script '/home/vezir/Projects/fluidapp/build-aux/meson/postinstall.py'