Why doesn't gdb see line numbers in my plugin?

When I hit an access violation, and do bt in the debugger, I see the names of my functions, but it’s only in the rack code that I see line numbers. How do I make gbd see my line numbers?

Does your makefile include -g in the cc options?

No, and I’ll bet that’s important :wink:

my makefile comes from the (old) VCV “template” plugin, and does this:

CFLAGS +=
CXXFLAGS +=

So I’m just using what’s in VCV’s plugin.mk. can I use -g all the time, or should I only use it in “debug” builds?

And thanks!

I would restrict it to debug builds, but I thinks it’s safe to use all the time.

You’d have to check the compiler documentation, but I don’t believe it prevents optimisations. It will make the object files bigger.

https://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options

oh, interesting. I’m going to guess that it gets stripped out when you do a make dist?

If I remember the make recipe for dist includes strip

yep

In order to get debugging working in the SDK I had to make two changes.

First, in compile.mk I removed the -O3 flag:

diff --git a/compile.mk b/compile.mk
index 96ea4b8..1926ccf 100644
--- a/compile.mk
+++ b/compile.mk
@@ -12,7 +12,7 @@ FLAGS += -MMD -MP
 # Debugger symbols. These are removed with `strip`.
 FLAGS += -g
 # Optimization
-FLAGS += -O3 -march=nocona -funsafe-math-optimizations
+FLAGS += -march=nocona -funsafe-math-optimizations
 # Warnings
 FLAGS += -Wall -Wextra -Wno-unused-parameter
 # C++ standard

And then in plugin.mk the stripcommand was removed:

diff --git a/plugin.mk b/plugin.mk
index 723f525..f44e1a1 100644
--- a/plugin.mk
+++ b/plugin.mk
@@ -59,6 +59,7 @@ dist: all
 ifdef ARCH_MAC
        $(STRIP) -S dist/"$(SLUG)"/$(TARGET)
 else
+       # $(STRIP) -s dist/"$(SLUG)"/$(TARGET)
        $(STRIP) -s dist/"$(SLUG)"/$(TARGET)
 endif
        @# Copy distributables

If I’m not mistaken the -g flag was already present, but the symbols were being stripped later.

-g should be compatible with -O3.

But aggressive optimization will often make for sections of very confusing line numbering, and the results can be less than useful

I found by debugger (gdb front-ended by VS Code) to be confused with -O3. Or at least it confused me!

1 Like

for sure. I’ve found that for my light use of bgf (basically getting stack traces for crash) it’s fine with -O3. But If I were doing single step debugging I know it would be a nightmare.