Un Debugger es para testear una aplicación e intentar solucionar bugs, a esta metodología se la denomina Debugging:
http://en.wikipedia.org/wiki/DebuggingUn Dissasembler es para traducir una aplicación, es decir, el lenguaje compilado, a su equivalente representación de lenguaje ensamblado separando el código de los datos, es algo parecido a un Decompiler.
PD: Los debuggers suelen llevar incorporados un dissasembler, quizás eso pueda confundir las características de ambos.
PD2: No se mucho sobre ingeniería inversa, intenté explicar la definición de Dissasembler lo mejor posible.
Saludos