Visual Studio Debugger includes features targeting easier debugging of multi-threaded applications. GDB offers a "remote" mode often used when debugging embedded systems. For Windows WinDBG or KD debuggers from Debugging Tools for Windows are used. Software tracing provides developers with information useful for debugging. Holberton invented breakpoints in computer debugging. TimeMachine is a set of tools for optimizing and debugging C and C++ software. This program typically provides many features for authoring, modifying, compiling, deploying and debugging software. Software developers mostly use JTAG for debugging and updating firmware. This tool requires a project to have unmanaged debugging enabled. Programmers commonly use stack tracing during interactive and post-mortem debugging. It also includes support for debugging and embedded Git Control. It includes "tools for developing, debugging, and monitoring Java applications". Programmers also apply the concept to improving and debugging legacy code developed with older techniques. These features aid the users during coding, debugging and testing. Hooking is used for many purposes, including debugging and extending functionality.