I am using Linux Mint 19.3 Tricia
.
I am tinkering with the nemo source code. I need a little debugging help. I checked https://forums.linuxmint.com/viewtopic.php?t=235125
https://stackoverflow.com/questions/31282505/how-to-debug-nemo-linux-mint-file-manager
The way I am changing the code and trying to debug is -
turned on 'source code repositories'.
git clone https://github.com/linuxmint/nemo
cd nemo
Now I am editing the code. I am using printf( "key_1 %s \n", key_1);
to observe different variables.
sudo apt-get build-dep nemo
dpkg-buildpackage
cd .. && sudo dpkg -i *.deb
ctrl+alt+backspace
to restart Xorg
Then I am using
$ gdb nemo
(gdb) r
Then looking for the printf
output.
I am sure there is a more elegant solution. Is there any way I can debug the code without printf
, dpkg-buildpackage
, ctrl+alt+backspace
?
@mtwebster I think nemo-main.c
is the main entry point. If I put breakpoint in VSCode, and run this file, will it work? What command shall I give to run nemo-main.c
.
Hi sorry, I meant to respond sooner.
The way you're building is fine. One thing I'll do to save time after the initial build and install using dpkg-buildpackage, is instead run:
sudo ninja -C debian/build install
-- to recompile subsequent times - it's much much faster, and there aren't any packages to install again (the system doesn't really care, you're copying over existing files) - this is good for doing as you are - adding debug output, etc. Just understand that when you want to do another 'real' build using dpkg-buildpackage, you'll need to use sudo to clean out the build folder (I use sudo git clean -fdx
- this returns it to its pristine state).
I've never tried to develop in a full ide, so I'm not even really sure how breakpoints work there. The simplest method is to insert a G_BREAKPOINT()
wherever you want it to stop - then you can do whatever you need to do in gdb.
You don't need to restart the session to restart nemo, just either do:
nemo --quit
or
killall nemo
If you want to debug the desktop icons, that is run with nemo-desktop
, so you'll need to kill/restart it instead. (You need to kill it twice the first time, the session manager attempts to restart it exactly once after the session starts, if it terminates).
I use print statements mostly, or gdb if I need to do something more complicated (there's plenty of documentation out there) - it depends on what you're attempting to fix or work on. Valgrind is a good tool for looking for memory leaks - check out https://wiki.gnome.org/Valgrind.
If you're getting glib/gtk/gobject warnings you can run G_DEBUG=fatal_warnings gdb
to start gdb, which will break on those warnings (and you can continue past them).
This library - https://developer.gnome.org/glib/stable is what pretty much everything is based on in nemo (along with gtk3) - I usually install the 'devhelp' program, along with -doc packages for these, which I find faster than browsing the web docs.
@blueray453 thank you for asking. I have been wondering the in's and out's as well for this.
@mtwebster thank you for guidance and pointing in the correct direction.
@icarter09 life is hard so have to ask.
Most helpful comment
Hi sorry, I meant to respond sooner.
The way you're building is fine. One thing I'll do to save time after the initial build and install using dpkg-buildpackage, is instead run:
sudo ninja -C debian/build install
-- to recompile subsequent times - it's much much faster, and there aren't any packages to install again (the system doesn't really care, you're copying over existing files) - this is good for doing as you are - adding debug output, etc. Just understand that when you want to do another 'real' build using dpkg-buildpackage, you'll need to use sudo to clean out the build folder (I use
sudo git clean -fdx
- this returns it to its pristine state).I've never tried to develop in a full ide, so I'm not even really sure how breakpoints work there. The simplest method is to insert a
G_BREAKPOINT()
wherever you want it to stop - then you can do whatever you need to do in gdb.You don't need to restart the session to restart nemo, just either do:
nemo --quit
or
killall nemo
If you want to debug the desktop icons, that is run with
nemo-desktop
, so you'll need to kill/restart it instead. (You need to kill it twice the first time, the session manager attempts to restart it exactly once after the session starts, if it terminates).I use print statements mostly, or gdb if I need to do something more complicated (there's plenty of documentation out there) - it depends on what you're attempting to fix or work on. Valgrind is a good tool for looking for memory leaks - check out https://wiki.gnome.org/Valgrind.
If you're getting glib/gtk/gobject warnings you can run
G_DEBUG=fatal_warnings gdb
to start gdb, which will break on those warnings (and you can continue past them).This library - https://developer.gnome.org/glib/stable is what pretty much everything is based on in nemo (along with gtk3) - I usually install the 'devhelp' program, along with -doc packages for these, which I find faster than browsing the web docs.