Development tools

From D Wiki
Revision as of 06:08, 15 February 2018 by D user (talk | contribs) (See also)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


See Compilers.

Package Manager

  • DUB - Also functions as a build tool


See Build Tools.



  • The D programming language has a built-in code documentation language (DDoc) and documentation generation, enabled by the -D compiler switch.
  • The dman tool can be used to quickly look up D keywords or standard library symbols.


See the documentation generators section in Community:Open_Source_Projects.

Source code

  • dfmt - formats D code
  • dfix - automatically updates D code

See also: Binding generators



Language features

The D programming language has built-in support for a number of debugging features:

Coverage analysis

The D compiler can generate code coverage reports, enabled by the -cov compiler switch. See the Code Coverage page for more information.


See the Debuggers page for a list of third-party debuggers.

See also: Troubleshooting Tools



CPU profiling

The D compiler can instrument generated code to measure per-function profiling information, and save a report on program exit. This is enabled by the -profile compiler switch. For projects that are configured to be built with dub, profiling can be enabled with the profile build type:

dub build --build=profile

The trace.log file can also be converted into a graphical HTML page using the third party D Profile Viewer.

Heap profiling

Starting with DMD 2.068, the D compiler can instrument memory allocations, and save a report on program exit. This is enabled by the -profile=gc compiler switch. Or, using dub, with the profile-gc build type:

dub build --build=profile-gc

This is also available through the command line switch "--DRT-gcopt=profile:1" see:

Third party

CPU profiling

  • Callgrind (from Valgrind) works well with D. D symbols will need be demangled (see #Demangling below).
  • Very Sleepy is a polling CPU profiler for Windows which works well with D. Debug information must be in PDB format (can be done by compiling with -m64, -m32mscoff, or by converting it using cv2pdb).
  • IACA profiles port usage. Works on asm level therefore it also works with d markers are inserted with (asm pure { mov EBX, 111 ; db 0x64, 0x67, 0x90 ; } and (asm pure { mov EBX, 222 ; db 0x64, 0x67, 0x90 ; })

File size profiling

  • D map treemap viewer can visualize a .map file in a treemap, and allows seeing at a glance what is using the most space in a compiled executable. Generating map files can be enabled with the -map compiler switch.
  • On the same page is a tool which attempts to disassemble an ELF binary, and finds which symbol is pulling in which symbol.

Build time profiling


GPerfTools (formely Google performance tools) can be used in the D programs compiled with LDC using gperftools-d, a binding to C library.



To demangle D symbols emitted by third-party programs, pipe the output through the ddemangle tool. The tool will recognize D symbols in its input, and replace them with the demangled versions, while outputting all other input intact.

D language development

These tools may be helpful when submitting D bugs, or when working on D itself:

  • DustMite can reduce a large program to a small one by performing reductions which satisfy a given condition (e.g. that a certain error message is reproduced).
  • Digger can build D, including old versions of D, and bisect D's history to find which commit fixed or introduced a bug.
  • TrenD ("Is D slim yet?") measures and visualizes D's history across a number of parameters.

See also