When people say “debuggers are useless and using logging and unit-tests is much better,” I suspect many of them think that debuggers can only put breakpoints on certain lines, step-step-step through the code, and check variable values. While any reasonable debugger can indeed do all of that, it’s only the tip of the iceberg. Think about it; we could already step through the code 40 years ago, surely some things have changed?
Tl;dr – in this episode of old-man-yells-at-cloud, you will learn that a good debugger supports different kinds of breakpoints, offers rich data visualization capabilities, has a REPL for executing expressions, can show the dependencies between threads and control their execution, can pick up changes in the source code and apply them without restarting the program, can step through the code backward and rewind the program state to any point in history, and can even record the entire program execution and visualize control flow and data flow history.
I should mention that the perfect debugger doesn’t exist. Different tools support different features and have different limitations. As usual, there’s no one-size-fits-all solution, but it’s important to understand what’s theoretically possible and what we should strive for. In this article, I will describe different debugging features and techniques and discuss the existing tools/products that offer them.
Disclaimer. In this article I mention various free and commercial products as examples. I’m not being paid or incentivised in any other way by the companies behind those products (although I will not say no to free swag should they decide to send me some cough-cough). My goal is to raise awareness and challenge the popular belief that “debuggers are useless, let’s just printf”.
Are there seriously professionals out there who think debuggers are useless? That is utterly baffling to me. Logging and tests are useful, but if something unexpected happens, the debugger is absolutely the first tool I’m reaching for unless I’m dealing with remote code (e.g. on a server) or some other scenario where using a debugger is a pain.
No kidding! I don’t think I’ve been without some kind of debugger since I was still just dicking around as a hobbyist. I can’t even really guess, because it seems like forever. I know I didn’t have access to a debugger on the VIC-20, but just when I first used one I can’t say.
I tend to use print way to much especially considering the programming language I am using has a debugger built in and I dont use it nearly enough.
ok I do use break so I can stop execution paired with printing but I really need to start actually using it.
however yes debuggers are awesome if anyone hasn’t tried one out give it a try, even if you are using a smaller lesser known language a lot of languages are more compatible than you think, I recently used windbg with the D programming language if you haven’t heard of that language, exactly, so give your language of choice a few google searches and see if there are any that work.
You are not logged in. However you can subscribe from another Fediverse account, for example Lemmy or Mastodon. To do this, paste the following into the search field of your instance: !programming@programming.dev
Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!
Cross posting is strongly encouraged in the instance. If you feel your post or another person’s post makes sense in another community cross post into it.
Hope you enjoy the instance!
Rules
Rules
Follow the programming.dev instance rules
Keep content related to programming in some way
If you’re posting long videos try to add in some form of tldr for those who don’t want to watch videos
I’m firmly in the print statement / console.log camp but this article convinced me to try using a debugger.
You are not alone
Are there seriously professionals out there who think debuggers are useless? That is utterly baffling to me. Logging and tests are useful, but if something unexpected happens, the debugger is absolutely the first tool I’m reaching for unless I’m dealing with remote code (e.g. on a server) or some other scenario where using a debugger is a pain.
No kidding! I don’t think I’ve been without some kind of debugger since I was still just dicking around as a hobbyist. I can’t even really guess, because it seems like forever. I know I didn’t have access to a debugger on the VIC-20, but just when I first used one I can’t say.
@firelizzard It’s unreal to me. I can’t fathom arguing against debuggers.
Rubymine’s debugger alone makes it worth it for ruby development, let alone all the other features.
Crazy productivity booster.
I tend to use print way to much especially considering the programming language I am using has a debugger built in and I dont use it nearly enough. ok I do use break so I can stop execution paired with printing but I really need to start actually using it. however yes debuggers are awesome if anyone hasn’t tried one out give it a try, even if you are using a smaller lesser known language a lot of languages are more compatible than you think, I recently used windbg with the D programming language if you haven’t heard of that language, exactly, so give your language of choice a few google searches and see if there are any that work.