[Mesa-dev] Let's talk about -DDEBUG

Eric Engestrom eric.engestrom at intel.com
Thu Dec 13 10:19:52 UTC 2018


On Wednesday, 2018-12-12 19:45:06 -0500, Marek Olšák wrote:
> On Wed, Dec 12, 2018 at 7:35 PM Rob Clark <robdclark at gmail.com> wrote:
> 
> > On Wed, Dec 12, 2018 at 7:14 PM Dylan Baker <dylan at pnwbakers.com> wrote:
> > >
> > > Quoting Rob Clark (2018-12-12 15:52:47)
> > > > On Wed, Dec 12, 2018 at 6:25 PM Dylan Baker <dylan at pnwbakers.com>
> > wrote:
> > > > >
> > > > > In the autotools discussion I've come to realize that we also need
> > to talk about
> > > > > the -DDEBUG guard. It seems that there are two different uses, and
> > thus two
> > > > > different asks about it:
> > > > >
> > > > > - Nine (and RadeonSI?) use -DDEBUG to hide generic debugging
> > > > > - NIR and Intel (at least) use -DDEBUG to hide really expensive
> > checks that are
> > > > >   useful, but necessarily tank performance.
> > > > >
> > > > > The first group would like -DDEBUG in debugoptimized builds, the
> > second
> > > > > obviously doesn't.
> > > > >
> > > > > Is the right solution to move the first group being !NDEBUG, or
> > would it be
> > > > > better to split DEBUG into two different defines such as
> > DEBUG_MESSAGES and
> > > > > EXPENSIVE_VALIDATION (paint the bikeshed whatever color you like),
> > with the
> > > > > first for both debug and debugoptimized and the second only in debug
> > builds?
> > > >
> > > > I guess my use cases for !=release builds are:
> > > >
> > > > + I want all the expensive checking because I'm not in it to win the
> > > >   deqp/piglit fps race
> > > > + I want debug syms for profiling and/or valgrind, but otherwise
> > > >   want something close to a release build but with debug syms
> > > >
> > > >
> > > > That said, I can get behind replacing DEBUG with !NDEBUG or
> > > > EXPENSIVE_DEBUG or whatever permutation of that color folks prefer
> > > >
> > > >
> > > > BR,
> > > > -R
> > >
> > > I guess I should have covered that:
> > >
> > > autotools had effectively two build types "debug" and "not debug",
> > "debug" set
> > > "-DDEBUG -g -O2", "not debug" set -DNDEBUG
> > >
> > > Meson has 4 build types, and a separate toggle for NDEBUG:
> > > debug: -O0 -DDEBUG (we add -DDEBUG)
> > > debugoptimzed: -O2 -g
> > > release: -O2
> > > plain: (nothing)
> >
> > I generally view meson as an upgrade in this respect, I guess mostly
> > because I have no use for '-DDEBUG -g -O2' (ie. the -O0 equiv is fine
> > by me).. maybe making meson debug config use -O2 would bridge the gap?
> >  If so I have no problem with dropping -O0 and making debug config
> > also use -O2
> >
> 
> Sounds good.
> 
> Also I think we should make -Db_ndebug=true the default for release builds.
> !NDEBUG enables a lot more debugging code than just assertions.

That's already the case :)

The default value (line 29 of the root meson.build) is:

  b_ndebug=if-release

which means it will default to `true` if `buildtype=release`, and `false`
otherwise, while still being overridden if you manually set `b_ndebug`.


More information about the mesa-dev mailing list