3 ms·
A lot of C++ devs advocate for simple replacements for the STL that do not rely too much on zero-cost abstractions. That way you can have small binaries, fast c
by torginus 10mo ago
A lot of C++ devs advocate for simple replacements for the STL that do not rely too much on zero-cost abstractions. That way you can have small binaries, fast compiles, and make a fast-debug kinda build where you only turn on a few optimizations.
That way you can get most of the speed of the Release version, with a fairly good chance of getting usable debug info.
A huge issue with C++ debug builds is the resulting executables are unusably slow, because the zero-cost abstractions are not zero cost in debug builds.
- pjmlp 10mo agoUnless one uses VC++, which can debug release builds. Similar capabilities could be made available in other compilers.
- torginus 10mo agoIts not just the compiler - MSVC like all others has a tendency to mangle code in release builds to such an extent that the debug info is next to useless (which to be fair is what I asked it to do, not that I fault it). Now to hate a bit on MSVC - its Edit & Continue functionality makes debug builds unbearably slow, but at least it doesn't work, so my first thing is to turn that thing off.
- pjmlp 10mo agoWhich is why recent versions have dynamic debugging mode.
- cyberax 10mo agoYou can debug release builds with gcc/clang just fine. They don't generate debug information by default, but you can always request it ("-O3 -g" is a perfectly fine combination of flags).
- pjmlp 10mo agoNot really, because some optimizations get the step through and such rather confusing. VC++ dynamic debugging pretends the code motion, inlining and similar optimizations aren't there and maps back to the original code as written. Unless this has been improved for gdb,lldb.
- cyberax 10mo agoAh, I see what you mean. GCC can now emit information that can be used to reconstruct the frame pointers for inlined functions: https://lwn.net/Articles/940686/ https://lwn.net/Articles/940686/ It's now filtering through various projects: https://sourceware.org/binutils/wiki/sframe https://sourceware.org/binutils/wiki/sframe It will not undo _all_ the transformations, but it will help a lot. I used it for backtraces, and it fixed the missing frame issues for me. This was possible with the earlier DWARF format (it's Turing-complete), and I think this is how VCC does it. Although I have not checked it.