User Tools

Site Tools


blog:pushbx:2023:0212_overview_of_debuggers

Overview of debuggers

2023-02-07

SID

The Symbolic Instruction Debugger, shipped with CP/M and the basis for DR-DOS's Debug.

86-DOS Monitor

Ancestor of MS-DOS Debug.

Microsoft Debug

The original debugger, shipped with MS-DOS and the NTVDM for a long time. An early version lacking some features is included in the free software MS-DOS v2 release (under MIT License). I modded this to recreate some of the missing features of later versions, in the repo called msdebug.

DDT

The Driver Debugger Tool, optimised for the low memory and small visible screen size of the Atari Portfolio. Under GNU GPL v2-or-later. Can load and probe block device drivers, written to test an IDE driver for the Pofo. No assembler included.

Insight

A real-mode debugger with 486 disassembler (but 16-bit assembler), and a windowed interface. Under GNU GPL v2-or-later. Originally from the mid-1990s, got some development in the 2000s. I continued its development starting in 2018. I also more recently decided to base the Einsicht companion interface to lDebug on this.

FreeDOS Debug

Started in the 1990s by Paul Vojta, interface based on Microsoft Debug. Since 2003 or so development was continued by Japheth, adding DPMI support and many extensions. Ships with autorepeat for D, U, and T commands. Under MIT License.

DOS Debug/X

Japheth's development of FreeDOS Debug eventually changed the project's name to DOS Debug/X. DebugX is the DPMI-capable build of this debugger, while Debug is the build that runs in Real/Virtual 86 Mode only. Still under MIT License, with Japheth's development noted as being in the public domain. Recently added a device driver build, a bootable build, and a Ring 0 Protected Mode build. Also added some features like video screen swapping and alternative video adapter output.

Enhanced Debug

Non-free (not distributable) though source-available fork of FreeDOS Debug, created by a former PC-DOS kernel developer. Adds DW and DD data dump commands, a P command which proceeds until a return instruction has run, autorepeat for P command, and page flipping support.

lDebug

FreeDOS Debug fork by me. Adds expression evaluator, autorepeat for P and G commands, TP command, general paging of long output, NASM-style disassembly and assembly, many runtime options, RE command buffer for trace register dump, RC command buffer and the /C command-line switch to initialise it, bootable and device-driver and resident (TSR) mode all in one generic build, debuggable and conditionally debuggable builds, buffered (silent) tracing, conditional tracing, permanent breakpoints, DW and DD commands, line editing and command history, G command keywords LIST, AGAIN, and REMEMBER, access variables to match memory accesses from R command disassembly, script file reading, serial I/O, AMIS interface and use, and a symbolic debugging build option. Some features like build time options for R86M interrupt 0Ch and 0Dh hooks, video screen swapping, alternate video adapter output, and a number of bugfixes were picked from DOS Debug/X development after the point lDebug was forked. lDebug is free software (under MIT License / Simplified 2-Clause BSD License / Fair License) and builds with a free software toolchain. It was originally forked to retain the NASM sources of FreeDOS Debug when DOS Debug/X changed the sources to JWasm.

The build process of lDebug is complex, and a default build of the debugger needs in excess of 100 KiB of resident memory. It is also likely slower than other debuggers.

TracList - lDebug companion application

TracList is a Perl script which listens to an lDebug session from a serial I/O connected terminal. It detects the last debugger disassembly and searches for matches in one or more listing files, displaying the result in its terminal TUI. It is designed to work with NASM listing files.

Einsicht - lDebug companion application

Einsicht is a planned companion application that is to connect to lDebug's serial I/O and re-implement Insight's windowed interface by communicating with an lDebug instance on another machine or VM.

Allegory - lDebug symbolic builds

This codename is for the planned releases of symbolic lDebug and its support scripts. The first phase was lDebug's symbolic branch. The second and current phase was achieved by merging the branch to lDebug's default branch as a build option. Future developments are planned to refine the symbolic support and expand the scripts.

Discussion

C. MaslochC. Masloch, 2023-03-09 17:31:11 +0100 Mar Thu

Insight appears to be based on a program called ACT. What that stands for, or what kind of application this was exactly, are unknown.

TomTom, 2023-04-03 14:36:41 +0200 Apr Mon

You forgot SoftICE https://en.wikipedia.org/wiki/SoftICE

which was (and is) the most powerful DOS debugger available. as it runs DOS in a virtual machine, it could be used to debug the DOS kernel itself, and was definitively used to debug the FreeDOS kernel.

it also could trace program execution, including only when executing in certain memory ranges (and running full speed when running anywhere else), trace only when writing to memory (using both 386 debug registers as well as page level memory protection), trapping writes to certain I/O ports, etc.

while it wasn't exactly free at $386, it was worth every cent if you do serious programming aka. debugging stuff.

you also forgot to mention MS CodeView. Seems you didn't do much programming in the pre 2000 timeframe;-)

C. MaslochC. Masloch, 2023-04-03 15:01:28 +0200 Apr Mon
You forgot SoftICE https://en.wikipedia.org/wiki/SoftICE

which was (and is) the most powerful DOS debugger available. as it runs DOS in a virtual machine, it could be used to debug the DOS kernel itself, and was definitively used to debug the FreeDOS kernel.

Yes, that's right. I believe that it was also used to debug doslfn. However, I have never used it nor (intentionally) found inspiration from it, thus it isn't on the list.

it also could trace program execution, including only when executing in certain memory ranges (and running full speed when running anywhere else), trace only when writing to memory (using both 386 debug registers as well as page level memory protection), trapping writes to certain I/O ports, etc.

Interesting, did it use paging for the "trace only in certain memory ranges" as well? That's the only way I can imagine that.

while it wasn't exactly free at $386, it was worth every cent if you do serious programming aka. debugging stuff.

you also forgot to mention MS CodeView.

And the Turbo Debugger, and Watcom's Debugger, and D86/D386, …

Seems you didn't do much programming in the pre 2000 timeframe;-)

That's right, I started learning programming in the mid 2000s.

C. MaslochC. Masloch, 2023-08-27 21:21:23 +0200 Aug Sun

DR-DOS Debug is another one I forgot. It is a derivative of SID likely, but changes the interface to be, in its standard mode, largely compatible to MS-DOS Debug. Some ideas from it probably inspired some lDebug features. For example, it also has an expression evaluator. Perhaps I will write about this more at some point.

You could leave a comment if you were logged in.
blog/pushbx/2023/0212_overview_of_debuggers.txt · Last modified: 2023-02-12 17:36:37 +0100 Feb Sun by ecm