Sorry, this page is no longer available
We may earn an affiliate commission when you visit our partners.
Course image
Geert Jan Bex, Ingrid Barcena, Mag Selwa, and Yulia Kallistratova

Most FutureLearn courses run multiple times. Every run of a course has a set start date but you can join it and work through it after it starts. Find out more This is an intermediate level course aimed at people with some programming experience. Although examples will be given in C and Fortran, the principles (and most of the tools) are transferable to other programming languages. You can use the hashtag #FLdebugging to talk about this course on social media.

Topics Covered

Read more

Most FutureLearn courses run multiple times. Every run of a course has a set start date but you can join it and work through it after it starts. Find out more This is an intermediate level course aimed at people with some programming experience. Although examples will be given in C and Fortran, the principles (and most of the tools) are transferable to other programming languages. You can use the hashtag #FLdebugging to talk about this course on social media.

Topics Covered

  • Defensive programming: the use of good coding style, documentation strategies and good code testing
  • Preventing bugs: how to use compiler flags and static code checkers to identify bugs in an early stage
  • Finding bugs: debugging concepts and technics
  • Using the debugging tools GDB and Valgrind to fix serial programs
  • Debugging parallel code: using Intel Inspector and ITAC

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Practical debugging and defensive coding

According to students, this course is a highly practical and insightful guide to defensive programming and debugging. Learners particularly praise its coverage of essential debugging tools like GDB and Valgrind, and the invaluable strategies for preventing bugs proactively. While many find the content exceptionally useful for writing robust code and appreciate the logical course structure, some indicate that the explanations for certain tools can be a bit rushed, suggesting a need for more hands-on labs or interactive exercises. It is widely recognized as an intermediate-level course, benefiting greatly from prior programming experience, especially in C.
Best suited for those with existing programming experience.
"It truly is an intermediate course, so having some C/Fortran background helps immensely."
"I struggled to keep up without prior extensive knowledge of C."
"This course was a bit challenging at times if you're not deeply familiar with C programming."
Covers essential debugging tools like GDB and Valgrind effectively.
"The modules on Valgrind and GDB were particularly well-explained, making complex debugging techniques accessible."
"I particularly appreciated the detailed coverage of GDB."
"I found the examples for GDB and Valgrind helpful and directly applicable to my projects."
Teaches highly practical strategies for robust coding and bug prevention.
"This course was incredibly insightful and practical. The focus on real-world application is excellent."
"Absolutely essential for anyone serious about writing robust code. The section on static code checkers and compiler flags helped me catch so many potential bugs..."
"The insights into preventing bugs proactively are invaluable. I particularly appreciated the detailed coverage of GDB."
"This course really improved my coding habits. The defensive programming strategies taught are gold."
Some found the pacing inconsistent and engagement varied.
"While the topics are important, I felt the course was quite dry and the pacing was inconsistent. Some parts moved too fast, others too slow."
"The course has good theoretical content, but I found some of the explanations for tools like GDB and Valgrind a bit rushed."
"My only minor critique is that the audio quality in some lectures wasn't great, but the slides were clear."
Some learners desire more hands-on exercises for tools.
"I found some of the explanations for tools like GDB and Valgrind a bit rushed. I had to look up external resources... Perhaps more hands-on labs would improve this."
"The practical application of the tools was not as strong as I hoped. I struggled with some of the assignments without more guided examples."
"I agree with others that some parts could benefit from more interactive exercises or clearer demonstrations."

Activities

Coming soon We're preparing activities for Defensive Programming and Debugging. These are activities you can do either before, during, or after a course.

Career center

Learners who complete Defensive Programming and Debugging will develop knowledge and skills that may be useful to these careers:

Reading list

We haven't picked any books for this reading list yet.
Provides a comprehensive guide to debugging embedded and real-time systems, covering the entire debugging lifecycle. It emphasizes best practices, specialized tools, and real-life case studies. This is an essential read for those working with embedded systems, offering a deep dive into the unique challenges and solutions in this domain.
Focuses on advanced debugging techniques for .NET applications using native debugging tools like WinDBG. It delves into the internals of the .NET CLR and provides in-depth knowledge for tackling complex .NET bugs. This is an essential resource for experienced .NET developers and those involved in troubleshooting production issues.
Focuses on practical debugging using popular tools like GDB, DDD, and Eclipse, commonly used in Linux/Unix environments. It provides hands-on guidance for using these debuggers effectively, covering topics such as inspecting variables, understanding memory issues, and debugging different programming paradigms. This is particularly useful for students and professionals working with C, C++, Java, Perl, or Python on these platforms. It serves as a valuable reference for tool-specific debugging.
Explores advanced debugging techniques, including those based on program analysis, visualization, and automated approaches. It delves into more complex debugging scenarios and provides insights into cutting-edge methods. This book is suitable for experienced developers and researchers interested in the theoretical underpinnings and advanced practices of debugging.
Takes a unique approach by guiding the reader through the process of building a debugger from scratch for x64 Linux systems using C++. This provides a deep understanding of how debuggers work internally, which can significantly enhance debugging skills regardless of the tools used. This is an advanced book suitable for those who want a thorough understanding of debugging at a low level.
Provides a comprehensive overview of the debugging techniques and tools for PHP code.
Drawing on extensive experience, this book presents a comprehensive collection of 66 specific and actionable debugging techniques. It covers a wide range of scenarios and provides practical advice for tackling complex software and system issues. is highly valuable for experienced programmers looking to expand their debugging toolkit and improve their efficiency in finding and fixing errors. It useful reference for various debugging challenges.
Offers practical strategies and techniques for finding, repairing, and preventing bugs, with a focus on enterprise software development. It provides a hands-on approach to improving your debugging skills and tackling common issues encountered in real-world projects. This book good resource for developers seeking to enhance their day-to-day debugging practices and reduce the number of defects in their code.
This advanced guide to GDB covers advanced topics such as debugging multi-threaded programs, debugging user-space programs, and using GDB with hardware debugging tools.
Provides a comprehensive overview of the underlying principles of debugging and describes various advanced techniques used in practice. It is suitable for readers with some prior knowledge of debugging.
Provides a collection of practical tips and techniques for debugging Python code, covering common issues and pitfalls.
Comprehensive guide to using the debugging features of Microsoft Visual Studio, covering topics such as setting breakpoints, examining call stacks, and using diagnostic tools.
Targets intermediate to advanced C/C++ programmers, focusing on reducing debugging time and improving program reliability. It covers debugging techniques specific to C and C++, as well as strategies for testing to prevent bugs. This book is valuable for C/C++ developers seeking to enhance their code quality and debugging efficiency.
This beginner-friendly book introduces the basic concepts of debugging and provides step-by-step instructions for debugging common problems in various programming languages.
Provides a foundational understanding of debugging principles applicable to both software and hardware. It outlines nine fundamental rules and offers practical strategies for identifying and resolving bugs. This is an excellent starting point for anyone new to debugging, providing a solid framework before diving into language-specific techniques. It is widely recommended for its accessible approach and timeless advice.
Offers a systematic and theoretical approach to debugging, moving beyond ad-hoc methods. It covers techniques for reproducing failures, isolating causes, and understanding the debugging process from a scientific perspective. While it delves into theoretical concepts, it also provides practical examples and insights into automated debugging tools. This book is valuable for those who want to deepen their understanding of the underlying principles of debugging.
Provides a comprehensive overview of debugging techniques and practices, covering both general principles and specific tools. It is an excellent resource for both beginners and experienced developers.
This widely acclaimed book for software developers includes valuable insights into the debugging process as part of a broader approach to building robust and maintainable software. It emphasizes practical advice and best practices that indirectly contribute to reducing bugs and improving debugging efficiency. While not solely focused on debugging, its principles are highly relevant and make it a must-read for any programmer.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser