Difference between revisions of "Development tools"

From D Wiki
Jump to: navigation, search
(draft)
 
(Build time profiling: Add dmdprof)
 
(15 intermediate revisions by 8 users not shown)
Line 1: Line 1:
 +
== Compilers ==
 +
 +
See [[Compilers]].
 +
 +
== Package Manager ==
 +
 +
* [http://code.dlang.org/ DUB] - Also functions as a build tool
 +
 +
== Building ==
 +
 +
See [[Build Tools]].
 +
 +
== Documentation ==
 +
 +
=== Built-in ===
 +
 +
* The D programming language has a built-in code documentation language ([http://dlang.org/ddoc.html DDoc]) and documentation generation, enabled by the <tt>-D</tt> compiler switch.
 +
 +
* The <tt>dman</tt> tool can be used to quickly look up D keywords or standard library symbols.
 +
 +
=== Third-party ===
 +
 +
See the documentation generators section in [[Community:Open_Source_Projects]].
 +
 +
== Source code ==
 +
 +
* [https://github.com/Hackerpilot/dfmt dfmt] - formats D code
 +
 +
* [https://github.com/Hackerpilot/dfix dfix] - automatically updates D code
 +
 +
See also: [[Bindings#Binding_generators|Binding generators]]
 +
 
== Debugging ==
 
== Debugging ==
  
Line 9: Line 41:
 
* [http://dlang.org/expression.html#AssertExpression Asserts], [http://dlang.org/contracts.html#Invariants invariants], and [http://dlang.org/contracts.html contract programming] (enabled by default, disabled by the <tt>-release</tt> compiler switch)
 
* [http://dlang.org/expression.html#AssertExpression Asserts], [http://dlang.org/contracts.html#Invariants invariants], and [http://dlang.org/contracts.html contract programming] (enabled by default, disabled by the <tt>-release</tt> compiler switch)
 
* [http://dlang.org/arrays.html#bounds Array bounds checking] (enabled by default, disabled by the <tt>-release</tt> or <tt>-boundscheck=off</tt> compiler switches)
 
* [http://dlang.org/arrays.html#bounds Array bounds checking] (enabled by default, disabled by the <tt>-release</tt> or <tt>-boundscheck=off</tt> compiler switches)
* [http://dlang.org/unittest.html Unit tests] (enabled by the <tt>-unittest</tt> compiler switch.
+
* [http://dlang.org/unittest.html Unit tests] (enabled by the <tt>-unittest</tt> compiler switch).
  
 
==== Coverage analysis ====
 
==== Coverage analysis ====
Line 19: Line 51:
  
 
See the [[Debuggers]] page for a list of third-party debuggers.
 
See the [[Debuggers]] page for a list of third-party debuggers.
 +
 +
See also: [[Troubleshooting Tools]]
  
 
== Profiling ==
 
== Profiling ==
Line 27: Line 61:
  
 
The D compiler can instrument generated code to measure per-function profiling information, and save a report on program exit.
 
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 <tt>-profile</tt> compiler switch.
+
This is enabled by the <tt>-profile</tt> compiler switch. For projects that are configured to be built with <tt>dub</tt>, profiling can be enabled with the [http://code.dlang.org/package-format?lang=json#build-types <tt>profile</tt> build type]:
 +
dub build --build=profile
 +
 
 +
The trace.log file can also be converted into a graphical HTML page using the third party [https://bitbucket.org/andrewtrotman/d-profile-viewer D Profile Viewer].
  
 
==== Heap profiling ====
 
==== Heap profiling ====
  
 
Starting with DMD 2.068, the D compiler can instrument memory allocations, and save a report on program exit.
 
Starting with DMD 2.068, the D compiler can instrument memory allocations, and save a report on program exit.
This is enabled by the <tt>-profile=gc</tt> compiler switch.
+
This is enabled by the <tt>-profile=gc</tt> compiler switch. Or, using <tt>dub</tt>, with the [http://code.dlang.org/package-format?lang=json#build-types <tt>profile-gc</tt> build type]:
 +
dub build --build=profile-gc
 +
 
 +
This is also available through the command line switch "--DRT-gcopt=profile:1" see:
 +
http://dlang.org/changelog.html#gc-options
 +
 
 +
=== Third party ===
 +
 
 +
==== CPU profiling ====
 +
 
 +
* Callgrind (from Valgrind) works well with D. D symbols will need be demangled (see [[#Demangling]] below).
 +
 
 +
* [https://github.com/VerySleepy/verysleepy 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 <tt>-m64</tt>, <tt>-m32mscoff</tt>, or by converting it using [https://github.com/rainers/cv2pdb cv2pdb]).
 +
 
 +
* [https://software.intel.com/en-us/articles/intel-architecture-code-analyzer 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 ====
 +
 
 +
* [http://thecybershadow.net/d/mapview/ 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 <tt>-map</tt> 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 ====
 +
 
 +
* [https://github.com/CyberShadow/DBuildStat DBuildStat] can measure the parsing and compilation times of a large project on a module-by-module basis ([http://dump.thecybershadow.net/e9aacf7a44a5a6a9c7b297f065eaed11/app.svg example output]).
 +
* [https://github.com/CyberShadow/ProcMonTools pmxml2svg] can graph a [http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx Process Monitor] .pmxml file ([http://dump.thecybershadow.net/cce8b705beecd97213c67923c2a67a48/dfeed.svg example output]).
 +
* [https://github.com/CyberShadow/dmdprof dmdprof] profiles DMD compilation time, including time spent in semantic analysis / CTFE.
 +
 
 +
==== GPerfTools ====
 +
 
 +
GPerfTools (formely Google performance tools) can be used in the D programs compiled with [[LDC]] using [https://github.com/prasunanand/gperftools_d gperftools-d], a binding to C library.
  
 
== Integration ==
 
== Integration ==
Line 41: Line 107:
 
The tool will recognize D symbols in its input, and replace them with the demangled versions, while outputting all other input intact.
 
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 ===
+
== D language development ==
 +
 
 +
These tools may be helpful when submitting D bugs, or when working on D itself:
 +
 
 +
* [https://github.com/CyberShadow/DustMite 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).
 +
 
 +
* [https://github.com/CyberShadow/Digger Digger] can build D, including old versions of D, and bisect D's history to find which commit fixed or introduced a bug.
 +
 
 +
* [http://digger.k3.1azy.net/trend/ TrenD] ("Is D slim yet?") measures and visualizes D's history across a number of parameters.
  
These tools may be helpful when working on D itself:
+
== See also ==
 +
*[[Other Dev Tools]]
  
== Other ==
+
[[Category:Tools]]

Latest revision as of 18:08, 8 August 2021

Compilers

See Compilers.

Package Manager

  • DUB - Also functions as a build tool

Building

See Build Tools.

Documentation

Built-in

  • 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.

Third-party

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

Debugging

Built-in

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.

Third-party

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

See also: Troubleshooting Tools

Profiling

Built-in

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: http://dlang.org/changelog.html#gc-options

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

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

Integration

Demangling

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