The general problem is that the autoupdater spawns a new executable and runs that. The debugger only controls the entry process (which does nothing but wait for the spawned process to quit). This quirk is required as it is otherwise not possible to unload all assemblies and reload the updated ones.
Disabling the autoupdater fixes this, by breaking the autoupdate feature, and then just running everything from the entry process.
The line with Windows, is just forwarding the console input/output from the spawned process to the parent process, such that a Windows commandline user can see the output from the spawned child.