Difference between disassembler, debugger & decompiler

Disassembler

A disassembler is a software tool which transforms machine code into a human readable mnemonic representation called assembly language.

Disassembler is used for static code analysis.

Ex : IDA, hopper

Debugger

Debugging is the art and science of finding and eliminating bugs in a software. Debuggers allow the user to view and change the running state of a program.

Debugger is used for dynamic code analysis.

Ex: gdb, x64dbg

Decompiler

A decompiler is a programming tool that converts an executable program or low-level/machine language into a format understandable to software programmers.

Ex : DejaVu, Mocha