News for hackers. Stuff that matters.
Re:The Sad State of Debug Performance in C++ by usefulcat on Monday September 26, 2022 @09:07AM (#32982636)
It's not just inlining. With -Og (clang or gcc), the debugger frequently can't even tell me the value of function arguments because they've been "optimized out".
Re:The Sad State of Debug Performance in C++ by adrian_b on Monday September 26, 2022 @09:50AM (#32983099)
While I agree with you and with the OP and I have also been sometimes annoyed by this kind of debugger messages, the more universal solution than wanting an improved debugger is to rely for debugging on some form of progress and error logging in your program, which will work at any optimization level.

Adding such debugging aids in your program may need some extra work, but it also functions in all cases when using the debugger is hopeless, e.g. for concurrent programs or other programs that depend on real-time interactions which prevent the use of breakpoints.

Re:The Sad State of Debug Performance in C++ by usefulcat on Monday September 26, 2022 @02:46PM (#32986710)
Yes and no. I use logging too, but that's only useful when I know (or can guess) ahead of time what locations and what things at each location I'll need to know in order to diagnose the problem.

Of course I can always go back and add some logging, but it's not a given that I'll want to keep it around after the problem is fixed. For example if it's in a performance-critical section of code, even the cost of checking to see whether logging is enabled may be too great. And in any case every log statement does add visual noise to the code.

Re:The Sad State of Debug Performance in C++ by SuperV1234 on Monday September 26, 2022 @12:30PM (#32985134)
Just want to remind you that `-Og` in Clang is not representative here, as it's exactly the same as `-O1` -- they implemented support for the flag just to ease transitions between GCC and Clang without having to filter out flags, but it doesn't provide any debugging-specific advantage.
Re:The Sad State of Debug Performance in C++ by not2b on Monday September 26, 2022 @03:43PM (#32987383)
Yes, those who think -Og is no good because they are clang users should perhaps file bug reports or contribute improvements instead.
Re:The Sad State of Debug Performance in C++ by SuperV1234 on Monday September 26, 2022 @03:45PM (#32987417)
Most game developers have to target Windows, and the main compiler there is MSVC. The other viable alternative is `clang-cl`, which doesn't have `-Og` either.

Bug reports have been filed, especially against MSVC, but they have been largely ignored over the years. AFAIK, MSVC is not open-source so improvements cannot be contributed either.

Re:The Sad State of Debug Performance in C++ by MauranKilom on Monday September 26, 2022 @04:22PM (#32987835)
Am I alone in always debugging in release builds? If you get a crash dump from prod, it'll be a release build. Or if your reproducer takes 2 minutes of (release build!) setup time, you don't want to go through that in debug builds.

Yes, the debugger might have "forgot" the value of that function argument. So check a few other levels of the call stack that it was passed through. Or a local variable might be unavailable in a given line. So have breakpoints a bit before, or trace it into the next function call.

And when all else fails, you can go and look at the disassembly. Yes, calling conventions are stupid, instruction mnemonics are a hassle and register aliases are terrible, but even with rudimentary understanding you can generally figure out what's going on. If your code does a multiplication, look for the `mult`. If your code calls some external function, look for a `call`. Compilers can do cool things with your code, but computers are not magic - you can actually just look at what your CPU does, and it will strongly correlate with your code. As an added bonus, this helps you actually understand what code your compiler produces, which (if you reach for C++!) you probably should care about to some degree.

The only reason I have to care about debug builds is code coverage and/or iterator-checked runs, but that's something that can run overnight if it has to.

/rant

Re:The Sad State of Debug Performance in C++ by menaerus on Tuesday September 27, 2022 @06:22PM (#33001913)
You're not. Debug builds are rarely that useful and tbh I don't understand why is there such a big fuss about it. The most difficult and most time consuming problems found in production code can only be debugged and, well, understood and hence fixed in production (optimized) code only.

That said, under assumption you have a good code coverage with tests, and your code uses a lot of asserts to check pre- and post-conditions, debug builds can be useful for early detection of broken invariants.

I get that the development cycle is shortened through shorter compile times but that is simply the artifact of all optimizing compilers and not something which is exclusive to C++. And luckily this can be easily alleviated.

Expecting to have comparable runtime performance (which one is it?) in languages backed with optimizing compilers seem a bit delusional to me and even more so if you're in the realm of soft real-time systems.

Re:The Sad State of Debug Performance in C++ by slaymaker1907 on Monday September 26, 2022 @04:19PM (#32987808)
I feel your pain. In those cases, you have to try and figure out what the assembly is actually doing and how it relates to the original source code.