What Does Debugging Mean?
Debugging is the process of locating and removing coding mistakes in computer programs. In information technology and engineering, the word 'bug' is a synonym for the word 'error.' The goal of debugging is to identify and correct an error's root cause.
Debugging plays an important role in the software development process and ironically, testing to determine and eliminating the presence of bugs can take just as much time as writing code. The debugging process itself consists of identify the cause of an error and fixing it. During the debugging process, which can be carried out manually or automated through software debugging tools, engineers will look for:
- Syntax errors
- Typos
- Errors in logic
- Implementation errors
Code debugging software tools include software development kit (SDK) support for specific programming languages, error alert functions and a user interface (dashboard) that allows developers to drill down for more information about specific errors.
Techopedia Explains Debugging
In the debugging process, complete software programs are regularly compiled and executed to identify and rectify issues. Large software programs, which contain millions of source code lines, are divided into small components. For efficiency, each component is debugged separately at first, followed by the program as a whole. In general, the way that debugging works depends on the global testing strategies that are chosen.
Debugging Strategies
Strategies for debugging include:
- Backtracking – the bug hunter starts from the statement at which an error symptom has been discovered and follows source code backwards to the actual error.
- Cause Elimination Method – the software engineer creates a list of potential causes for an error and runs tests to determine the origin of a point of failure.
- Program Slicing – quality assurance (QA) testers run a group of program statements in the program (slice) under specific conditions.
- Shotgun Debugging – a trial-and-error, fingers-crossed approach to debugging based on a developer's educated guesses.
- Rubber Duck Debugging – the programmer explains code line-by-line to a small rubber duck or other inanimate object. The goal is to encourage flexible, logical thinking.
- Pair Debugging – instead of explaining code line-by-line to an inanimate object, developers take turns explaining code to each other line-by-line.
Importance of Debugging
Debugging as a fundamental part of code handling and software development. Experts often talk about debugging as involving “people, processes and systems” that will help to iron out any issues with an existing code base.
An excellent example of this is the rise of modern practices called “reverse debugging.” In the age of devOps and agile software development, reverse debugging involves monitoring programs and delivering data in particular ways, in order to automate the process of debugging. This used to be done by individual computer scientists in a process that often resembled a kind of technical detective work.
In the old days, programmers filed individual tickets after observing some functional bug while testing, and then went back and scoured the code manually or used now-primitive debuggers to figure out what was going on. It wasn’t unusual for even a seasoned team to be “stumped” for a while, either because of the sophistication of the code that created the bug, or the elusiveness of the bug in testing, or both.
By contrast, reverse debugging systems that resemble the design of flight recorders in airplanes track programs in runtime, or otherwise monitor programs, in order to deliver the right information to make debugging more of an automated process.
By doing more kinds of sophisticated monitoring in real-time or as programs are used, reverse debugging tools will catch more of the details that computer scientists would have traditionally had to investigate manually and help developers prioritize which errors should be addressed first.
Automated Debugging
Automated debugging tools can help developers simplify handling errors and reduce the time it takes to fix typographical errors and mistakes in syntax or logic.
This kind of quality assurance (QA) tool can capture exceptions as they occur and provide developers with diagnostic and contextual data to make the error resolution easier. Some automated debugging tools use hard-coded algorithms while others use machine learning engines to identify different types of errors and error patterns.
When development teams use continuous integration and continuous delivery (CI/CD), debugging can be done automatically in unit tests during the development process or through canary tests that release code changes to a limited number of end-users in the production environment.
Debugging Tools
Dalvik Debug Monitor Service (DDMS) is a debugging tool used in the Android platform. The Dalvik Debug Monitor Service is downloaded as part of the Android SDK. Some of the services provided by the DDMS are port forwarding, on-device screen capture, on-device thread and heap monitoring, and radio state information.
The Dalvik Debug Monitor Service allows developers to spot bugs in applications running on either an emulator or an actual Android device. For example, by using the DDMS’ LogCat feature, developers can view log messages regarding the state of the application and the device. LogCat can pinpoint the exact line number on which an error occurred.
Another DDMS feature, known as the Emulator Control, allows developers to simulate phone states and activities. For example, it can simulate different types of networks such as GPRS, EDGE, and UTMS, which can have different network characteristics such as speed and latency.
Aside from the features mentioned earlier, the Dalvik Debug Monitor Service also provides LogCat, process, and radio state information as well as incoming call, SMS, and location data spoofing. This debugging tool can be integrated into the Eclipse IDE by adding the ADT (Android Development Tools) plug-in. Otherwise, it can be accessed from the command line and will automatically connect to any running emulator.
Other popular debugging apps include:
Chrome DevTools is a set of authoring, debugging, and profiling tools built into Google Chrome.
Fusion Reactor is a continuous monitoring and live debugging tool for Java and ColdFusion. It allows software engineers to cross-reference API calls and small units of code without having to continually compile code.
GDB (The GNU Debugger) runs in the command line and can be used to debug programs written in C, C++, Fortran and Modula-a.
Interactive Disassembler (IDA) allows software engineers to reverse engineer machine-executable code back into assembly language.
Lightrun is a server-side debugger that lets developers run tests and diagnostics against microservices, Kubernetes, Docker swarms and Amazon Web Services.