C++ Moment
C++ Moment
C++ Moment
Except the C++ "Core dumped" line is telling you it just wrote a file out with the full state of the program at the time of the crash, you can load it up and see where it crashed and then go and look at what every local variable was at the time of the crash.
Pretty sure you can even step backwards in time with a good debugger to find out exactly how you got to the state you're currently in.
Where does it write the file
tl;dw: writes to the path in /proc/sys/kernel/core_pattern
If you are using systemd, there's a tool called coredumpctl.
let's not act like Java's error log is useful
but you can follow any exception down to the exact line of code (or JNI call, I guess) where the problem occurs.
But, it's not really where the problem occurred. How often do you get a stack trace and the bug fix is at the line referenced by the stack trace? Almost never. It's more that it takes you down to the exact line of code where the effects of the problem are bad enough to affect the running of the program. But, the actual problem happened earlier, sometimes much earlier.
For example, NullPointerException isn't actually the problem, it's a symptom of the problem. Something didn't get initialized properly, and nobody noticed for a while, until we tried to use it, and got a null pointer. Sometimes it's easy to go from the effect (null pointer) to the cause (uninitialized thing). But, other times that "thing" was passed in, so you have to work backwards to try to figure out where that thing comes from, and why it's in that broken state.
Sure, it's better than nothing, but it's still frustrating.
I think it's pretty useful, be interested to hear your hangups with it though because it's definitely not perfect.
If something goes wrong and I have a stack trace, that plus the type of exception will almost always be enough for me to figure out what's wrong at least as a starting point. I've worked mostly with JVM languages in my career though so maybe I just don't know how bad it actually is.
It's not bad. It's better than what most languages give you
It's extraordinarily useful
Implying you can't consistently go to the same line every time and it always has what you need.
My favorite compile error happened while I was taking a Haskell class.
ghc: panic! (the 'impossible' happened)
The issue is plainly stated, and it provides clear next steps to the developer.
I had a similar error, though not from the compiler
Error message just read this should never happen
Ah, good old PlarformIO
Python: So you used spaces and tabs for indentation? NOW DIE!
Good. Spaces and tabs for indentation should never be mixed in any language other than Whitespace.
Some people use tabs for indentation and spaces for alignment. It kind of gets the pros of tabs (user configurable indent-width) and the pros of spaces (alignment). That doesn't work in Python where you can't align stuff and the interpreter doesn't allow mixing tabs with spaces, but in other languages it is a possible style.
Raw adjust with tabs, fine adjust with spaces.
Don't laugh, people are actually doing that.
Mixing tabs and white spaces in 2024 is categorically a you problem lmao
Are you ok?
Rust developer: I'd like to compile some code
Rust compiler: the fuck you are
The rust compiler holds your hand, wraps you in blankets, makes you hot chocolate, kisses you on the forehead before it gently and politely points out what you did wrong and how you can solve it step-by-step. It would never think of something as heinous as swearing at you, shame on you for insulting my wife's honour like this.
I need a rust compiler in my life 😍
The rust compiler produces a flawless understanding of your code, and then quits out because understanding that code is a Nightly-only feature and you're using the stable build.
except when it gives errors about lifetimes of some object.
boy, that makes my brain hurt
I don’t know from where this legend comes from but lifetimes/concurrency/macros errors are brain-hurting.
Most of the time I find myself dropping project because I wrote my program in a correct way but Rust just does not like how it is designed lol. I can’t get shit done with this language
gdb: Am I a joke to you?
Yes. It's a surprisingly bad debugger the more you think about it. I use it largely in assembly and it loves to spit out random errors about memory it tried to access based on the current register state. The shortcuts are kind of dumb.
It certainly works but I wouldn't call it a pleasure to use.
Ex: try disp x/1i $eip
often just doesn't work.
I use gdb with great success for x64, rv64, and c:
info registers rip
or just setup tui:
# ~/.config/gdb/gdbinit: tui new-layout default regs 1 {-horizontal src 1 asm 1} 2 status 0 cmd 1 tui layout default tui enable
I honestly vastly prefer using IDA and Windows specific tools (x64dbg) over gdb. IDA can interface with gdb so it can act as a frontend which can be handy for visualization.
Embedded C entered the chat
Your loop had a race condition, so we let the smoke out for you.
Can't believe that my code is racist smh
Ho hoo, that isn't smoke, it's steam, from the steamed rams we're having! Mmm, steamed rams.
// I am responsible for every byte of this code and still don't know why this line breaks everything.
https://www.youtube.com/@TsodingDaily
If you're a programmer, or think you might want to be one, I highly recommend this channel. He's a savant at all sorts of low level things, quite funny and entertaining, and does a fantastic job of explaining what's going on.
Good gods, a long-form content creator! Will be checking this out later
tsoding's channel is one I look forward to watching every single day, never a dull moment in his streams/videos.
If you're someone who likes to watch things live, his Twitch channel is available here.
he's russian tho
The guy is testing the result of malloc and you are complaining about how?
Imagine unironically praising Java.
Java is a traditional and conservative language, which has its strong upsides, like the syntax being familiar to many people who haven't used the language before. It's a language that brought us the JVM, gave a job to many people and established fundamentals for other languages to inspire and improve on. If you don't like Java, you can just use another language for the JVM, like Scala, Kotlin or Clojure.
You only named one upside, I can't think of any other, and C-like syntax is pretty common, so it's not much of an upside. It's at least debatable whether the JVM is a good thing at all - the majority of languages get along perfectly well without it, and there's no reason to believe the ones that do target it wouldn't be doing just fine if it didn't exist. It's weird to say Java gave a job to anybody - the demand to have software written resulted in programmers being hired; if Java hadn't been pushed on the market by Sun, it would have just been another language. Java didn't establish any fundamentals at all, it just borrowed from other places. While all three of the other languages you mention are interesting, for sure, I'm not sure why somebody who doesn't like Java should limit themselves to JVM languages.
Java is good. Supporting Java legacy is bad
Java good
Opinion bad
All the ideas are good.
Only the ideas are good.
Java: Not all poo poo.
Java is awesome. There ya go
Oh yes, let's pick on the weak programming languages because haha funi
This C++ message has an urgency vibes to it:
"Segmentation fault!! Drop the Nuclear Reactor quick!!"
Average C++ error
gdb ./fuck r where
you should get a complete stack trace (complete with values of some function arguments)
No bounds checking, only fast.
There is bounds checking, but it's opt-in. I often enable it on debug builds.
This right here - C++ iirc is used mostly for microprocessor code in an industry setting, where EXTENSIVE testing is done so that bloated code doesn't need to constantly check for programmer errors every single time, i.e. where execution speed is prioritized over programmer development time. And whenever that is not the case, well, as OP pointed out, other higher-level languages also exist (implication: to choose from).
C++ iirc is used mostly for microprocessor code
lol no, it's used almost everywhere where performance is important and people want(ed) OOP, from tiny projects to web browsers (Chrome, Firefox) to game engines (Unreal, CryEngine). Many of these are hugely complex and do encounter segfaults on a somewhat frequent basis.
Saying C++ is mostly used for embedded applications is like saying C# is mostly used for scripting games, i.e. it doesn't nearly cover all the use cases.
higher-level languages also exist
This depends on your definition of "higher-level", but many people would argue that C++ is on a similar level to Java or C# in terms of abstraction. The latter two do, however, have a garbage collector, which vastly simplifies memory management for the programmer(generally anyway).
I also currently use it for a new project since all needed 3rd party libraries are from a very specific domain and the project has a deadline, so writing and testing wrappers for Rust that would provide me with any meaningful advantages down the road are too costly to budget for before the deadline.
That could become part of a future refactoring, though.
Nevermind that the C++ program is two orders of magnitude faster when completed.
I would love to learn and use Rust but I'm a embedded systems guy. Everything of consequence is C and C++.
If the embedded system is old or poorly-maintained enough, there might be more Rust than you'd think.
There's embedded rust for a few platforms. Using it on ESPs is fun
Rust seems pretty performant
https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/rust-gpp.html
Joke on you until the python program segfaults
If it does it's because of C/C++ code
The developer must either provide the logging and attach a debugger or go get fucked when a runtime error happens
That's not true though. You can get the backtrace and other useful information from the coredump mentioned by the error message by loading it with gdb. Not as good as attaching it to a living process, since you can't see step-by-step what happens leading up to the error, but still quite useful.
Well yes, that's a pretty good way of debugging a third party app but if you are developing something you can have more ease with gdb attached
are you c++?
You can also debug post-mortem with the minidump or the core dump file with WDT on Windows. Great fun and a good way to brush up on your assembly skills
Great fun and a good way to brush up on your assembly skills
Just load it on the debugger and leave your asm skill gather patina.
I know this is supposed to be humorous, but there's a reason why these languages can, and are doing what they're doing.
Core dumps are also worth learning about, they're really helpful if you understand them.
More like 100 lines of template errors
If only I could show segfaul stack tracetrough looped macros.
It breaks VSCode (it would be hilarious if I wasn't the author of said macros).
At least you are getting a dump, count your blessings. Could be worse!
Just hook your app to a debugger and load the dump.
The ole' single C++ error turning into 600 lines of issues
C#: Time for a treasure hunt! Find the Null Reference Exception. Here's a map. X marks the spot.
C# tells you the call site/method name and line number right at the top. It's only really annoying when you have aggregate exceptions, which sometimes occur because someone async'd wrong
Actually getting there is the other part. It's not like java where you can go down the chain if the problem isn't where it says it is.
puts me in mind of the old guru meditation error messages that popped up in the stone knives and bearskins era of computing.
Why doesn't JavaScript have tracebacks?
How useful would they be when they rely to such a large extent on various callback functions?