Last updated on May 23, 2024
- All
- Debugging
Powered by AI and the LinkedIn community
1
Print statements
2
Breakpoints and stepping
3
Debugging tools
4
Testing and logging
5
Rubber ducking
6
Asking for help
Be the first to add your personal experience
7
Here’s what else to consider
Be the first to add your personal experience
Debugging is the process of finding and fixing errors in your code. It can be challenging, frustrating, and time-consuming, but also rewarding and satisfying. In this article, you will learn some common debugging techniques and when to use them to make your code more reliable and efficient.
Key takeaways from this article
-
Choose the right tool:
Different debugging issues require specific tools; for example, kernel logs for signature issues or memory dumps for hardware problems. Selecting the appropriate tool can make debugging more efficient.
-
Embrace rubber ducking:
This quirky technique involves explaining code to an inanimate object, which can clarify your thoughts and uncover overlooked errors. It's a solo activity that sometimes brings out "a-ha" moments.
This summary is powered by AI and these experts
- Austin Kim Linux kernel Engineer | Author | RISC-V…
- Geoffrey Shera COO, Co-Owner, at Motus Design Group…
1 Print statements
One of the simplest and most widely used debugging techniques is to insert print statements in your code to display the values of variables, expressions, or messages. This can help you identify where and why your code is not behaving as expected, or to verify that it is working correctly. You can use print statements to test your assumptions, check your logic, or trace the execution flow of your code. However, print statements can also clutter your code, slow down your performance, or cause unwanted side effects. Therefore, you should use them sparingly, strategically, and remove them once you are done debugging.
Help others by sharing more (125 characters min.)
- Milap Patel Node.js | React | JavaScript | PHP | WordPress | Front-end | SASS | Mongodb | Laravel | Drupal | MySQL
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Print statements are a simple yet powerful debugging technique in programming. Developers use print statements to output specific values or messages to the console during program execution. This helps them understand the flow of the program, inspect variable values, & identify potential issues. Print statements are especially useful when dealing with loops, conditionals, or complex logic. By strategically placing print statements at different points in the code, developers can track the program's state & identify where unexpected behavior occurs. While print statements are effective for small to medium-sized debugging tasks, more complex or persistent issues may require advanced debugging tools or techniques.
LikeLike
Celebrate
Support
Love
Insightful
Funny
2
- Aliaksandr Kavalchuk Firmware | Embedded Engineer
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Perhaps it would be more correct not to delete print statements, but to customize the application build accordingly so that in the debug configuration these print statements remain and are turned off only at the release build
LikeLike
Celebrate
Support
Love
Insightful
Funny
- Chibueze G. Software Engineer: C# || Asp.Net || .Net MAUI || Bootstrap CSS
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Debugging is an essential part of programming, and it can be challenging for newbies to overcome debugging issues. Here are some tips that can help:Reproduce the problem: Try to reproduce the problem as much as possible. Ideally, reduce the input to the minimum required to reproduce the issue.Examine what goes wrong: Once you have reproduced the problem, examine what goes wrong and list theories for where the bug may be.Debug one theory at a time: Examine one theory at a time by debugging that specific area of the code. Repeat steps as necessary.Work with a colleague: For complex debugging problems, it’s often helpful to work with a colleague.
LikeLike
Celebrate
Support
Love
Insightful
Funny
- Geoffrey Shera COO, Co-Owner, at Motus Design Group Ltd.
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Print statements are great, but need to be used with awareness on the impact of system performance and memory. Resource constrained embedded systems with real time dependencies can be adversely affected by adding too many print statements hiding real problems. Good practice is to to use feature specific debug macros that generate a debug output. These can be enabled through a CLI, or if program space is limited through project configuration build time.
LikeLike
Celebrate
Support
Love
Insightful
Funny
2 Breakpoints and stepping
Another common debugging technique is to use breakpoints and stepping tools. Breakpoints are locations in your code where you want to pause the execution and inspect the state of your program. You can set breakpoints manually or conditionally, depending on your needs. Stepping tools allow you to resume the execution one line, statement, or function at a time, and observe how your code changes. You can use breakpoints and stepping tools to isolate the source of an error, examine the values and types of variables, or evaluate expressions. However, breakpoints and stepping tools can also be tricky to use, especially in complex, asynchronous, or multithreaded code. Therefore, you should use them carefully, selectively, and understand their limitations.
Help others by sharing more (125 characters min.)
- Milap Patel Node.js | React | JavaScript | PHP | WordPress | Front-end | SASS | Mongodb | Laravel | Drupal | MySQL
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Breakpoints & stepping are advanced debugging techniques that allow developers to pause the execution of their code at specific points & inspect the program state. Breakpoints are markers set at particular lines of code, & when the program reaches a breakpoint, it halts, giving the developer an opportunity to examine variables & evaluate expressions. Stepping, on the other hand, involves executing the code one line at a time, allowing developers to observe the program's behavior step by step. These techniques are beneficial when dealing with hard-to-reproduce bugs, as they provide a detailed view of the code's execution flow. Developers often use integrated development environments (IDEs) to leverage these debugging features effectively.
LikeLike
Celebrate
Support
Love
Insightful
Funny
1
- Geoffrey Shera COO, Co-Owner, at Motus Design Group Ltd.
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Breakpoints & code stepping (step over, step in) are essential tools and should be learned well. With embedded systems, the code and debugging is very close to the hardware, so it important to consider effects of independent hardware features on what the memory or variable state is telling you (which is why print statements and buffer logs can be useful!) Features such as such as DMAs, UARTs, and other peripherals may continue to operate independent of core breakpoint and change memory information even when the code has halted. Creating a "trap" that only hits a breakpoint on specific conditions can allow additional code to disable peripherals if needed for stepping through.
LikeLike
Celebrate
Support
Love
Insightful
Funny
3 Debugging tools
There are many debugging tools available for different programming languages, environments, and platforms. Some of them are built-in, such as the Python debugger (pdb) or the Chrome DevTools. Some of them are external, such as Visual Studio Code or PyCharm. Debugging tools can provide you with various features and functionalities, such as setting breakpoints, stepping, watching variables, evaluating expressions, editing code, or logging events. You can use debugging tools to enhance your debugging experience, save time and effort, or discover new insights. However, debugging tools can also be overwhelming, confusing, or incompatible. Therefore, you should use them wisely, appropriately, and learn how to use them effectively.
Help others by sharing more (125 characters min.)
- Austin Kim Linux kernel Engineer | Author | RISC-V | Arm | 4x LinkedIn Top Voice 🏆
(edited)
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
There are a lot of debugging tools for software engineers to utilize. One thing to consider is that there are no perfect debugging tools that provide human-readable information. It is better to find the right debugging tool that indicates relevant signatures about the issues. Considering the debugging level is important. For example, in Linux development:1) We can figure out the signature using the kernel log.2) Sometimes, we need to look at the ftrace messages of the Linux kernel to monitor the system at the kernel level.3) If the issue is related to hardware problems such as bit-flip, digging into the memory dump is necessary.We need to find the appropriate debugging tool depending on the complexity and level of the software issues.
LikeLike
Celebrate
Support
Love
Insightful
Funny
8
- Milap Patel Node.js | React | JavaScript | PHP | WordPress | Front-end | SASS | Mongodb | Laravel | Drupal | MySQL
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Debugging tools are particularly valuable when dealing with complex applications, as they offer a systematic and efficient way to locate and fix bugs. Developers should turn to debugging tools when issues are challenging to pinpoint through manual inspection or when they need a more comprehensive understanding of the program's runtime behavior. Leveraging these tools enhances productivity and facilitates a more structured approach to debugging, making it easier to identify and resolve issues in a timely manner.
LikeLike
Celebrate
Support
Love
Insightful
Funny
2
- Milap Patel Node.js | React | JavaScript | PHP | WordPress | Front-end | SASS | Mongodb | Laravel | Drupal | MySQL
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Debugging tools are essential for identifying and resolving issues in software development. Integrated Development Environments (IDEs) provide powerful debugging features that include breakpoints, variable inspection, and step-by-step execution. Developers can use these tools to trace the program's execution, analyze variable values, and understand the flow of control.
LikeLike
Celebrate
Support
Love
Insightful
Funny
1
- Geoffrey Shera COO, Co-Owner, at Motus Design Group Ltd.
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Speaking to debugging on embedded system, most vendors provide IDE's and hardware debuggers for working with their products. However, many of these products can also be used with open source compliers, GNU debugger, and open OCD debugger or a mix of GNU and vendor specific. The fun side of embedded debugging is developers have additional tools such as hardware logic analyzers, protocol analyzers, and execution trace hardware such as Segger JTrace. Software real time analysis tools such as Segger System view, VisualGDB can be essential for observing the interaction between real time tasks. Encapsulation of development tools in a docker container is also becoming easier as these virtualization technologies mature.
LikeLike
Celebrate
Support
Love
Insightful
Funny
4 Testing and logging
Another common debugging technique is to use testing and logging tools. Testing tools allow you to write and run automated tests that check the correctness and quality of your code. You can use testing tools to prevent, detect, or reproduce errors, or to refactor and improve your code. Logging tools allow you to record and monitor the events and activities of your code. You can use logging tools to track the performance, behavior, or status of your code, or to analyze and troubleshoot errors. However, testing and logging tools can also be complex, tedious, or costly. Therefore, you should use them systematically, consistently, and optimize them for your needs.
Help others by sharing more (125 characters min.)
- Milap Patel Node.js | React | JavaScript | PHP | WordPress | Front-end | SASS | Mongodb | Laravel | Drupal | MySQL
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Testing and logging are crucial debugging techniques that contribute to robust software development. Unit tests, integration tests, and other testing methodologies help identify errors early in the development process, preventing bugs from reaching production. By creating comprehensive test suites, developers can ensure that different components of their code work as intended. Logging involves strategically placing messages in the code to record its execution flow and the values of specific variables. When an issue arises, developers can review the logs to trace the problem's origin.
LikeLike
Celebrate
Support
Love
Insightful
Funny
2
- Milap Patel Node.js | React | JavaScript | PHP | WordPress | Front-end | SASS | Mongodb | Laravel | Drupal | MySQL
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Testing is best used throughout the development process, particularly during code changes, while logging is essential when investigating unexpected behavior or errors in a live or production environment. These techniques collectively enhance code quality, identify issues proactively, and streamline the debugging process.
LikeLike
Celebrate
Support
Love
Insightful
Funny
2
- Geoffrey Shera COO, Co-Owner, at Motus Design Group Ltd.
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Unit testing is invaluable for quality code. Investment in time up front pays dividends later on. Having a deliberate plan of how your unit testing can work as part of your build process and identify broken features early. Modern embedded platforms Zephyr include unit test frameworks. Learning to use other frameworks such as CppU test can also be useful in embedded development. While it can be challenging to do unit testing for embedded systems, tools such as Renode can provide simulation of hardware to have a CI mindset. Logging is not useful without analytics. When developing logging output bear in mind how the log information will be consumed. An automated tool can be used to parse and identify useful fault or performance metrics.
LikeLike
Celebrate
Support
Love
Insightful
Funny
5 Rubber ducking
One of the most unconventional and fun debugging techniques is rubber ducking. Rubber ducking is the act of explaining your code or problem to a rubber duck (or any other inanimate object) out loud. This can help you clarify your thoughts, spot mistakes, or find solutions that you might have overlooked. You can use rubber ducking to debug your code by yourself, without relying on anyone else. However, rubber ducking can also be embarrassing, distracting, or ineffective. Therefore, you should use it moderately, privately, and with a sense of humor.
Help others by sharing more (125 characters min.)
- Geoffrey Shera COO, Co-Owner, at Motus Design Group Ltd.
- Report contribution
Thanks for letting us know! You'll no longer see this contribution
Rubber ducking is a very useful exercise. A strong company culture is needed for effective rubber ducking. Developers need the safety to be vulnerable and be allowed to talk through a problem that is often only obvious once it is needed to be explained to another developer. When doing this exercise, bear in mind not everybody has the same skills, experience or thinks the same way, so be kind and everyone may learn and enjoy the experience.
LikeLike
Celebrate
Support
Love
Insightful
Funny
3
6 Asking for help
One of the most effective and humble debugging techniques is asking for help. Asking for help is the act of seeking assistance or feedback from someone else who might have more knowledge, experience, or perspective than you. This can help you solve your problem faster, learn new skills, or avoid frustration. You can use asking for help to debug your code by reaching out to your peers, mentors, instructors, or online communities. However, asking for help can also be intimidating, annoying, or inappropriate. Therefore, you should use it respectfully, politely, and after trying other debugging techniques first.
Help others by sharing more (125 characters min.)
7 Here’s what else to consider
This is a space to share examples, stories, or insights that don’t fit into any of the previous sections. What else would you like to add?
Help others by sharing more (125 characters min.)
Debugging
Debugging
+ Follow
Rate this article
We created this article with the help of AI. What do you think of it?
It’s great It’s not so great
Thanks for your feedback
Your feedback is private. Like or react to bring the conversation to your network.
Tell us more
Tell us why you didn’t like this article.
If you think something in this article goes against our Professional Community Policies, please let us know.
We appreciate you letting us know. Though we’re unable to respond directly, your feedback helps us improve this experience for everyone.
If you think this goes against our Professional Community Policies, please let us know.
More articles on Debugging
No more previous content
- What are some best practices for naming and organizing breakpoints in Chrome DevTools? 3 contributions
- How do you test and document your exception handling code to ensure reliability and readability? 2 contributions
- What are the common patterns and anti-patterns in thread dump analysis? 1 contribution
- What are the skills and competencies required for code reviews for debugging? 6 contributions
- How do you test and monitor your code for memory leaks in production? 17 contributions
- How do you deal with legacy code that has little or no unit tests? 9 contributions
- How do you compare the values of different variables with watchpoints in Chrome DevTools?
- What are the benefits and drawbacks of binary search debugging?
No more next content
More relevant reading
- Programming What debugging techniques and trends should you know to stay up-to-date?
- Programming How can you standardize debugging processes in a team?
- Front-end Development How can you avoid common front-end debugging myths?
- Programming Your debugging process is causing you headaches. How can you make it less painful?