Hi,
The .bin file generated by VisualGDB should be the correct one. Furthermore, once you start a debugging session, the firmware is actually programmed into the FLASH memory in order to be debugged.
Most likely your code is using semihosting-related functionality (e.g. calling printf()) that are intercepted under debugger and cause the program to wait for a debugger to attach otherwise. The easiest way to figure out what is going on is to use the Debug->Attach to Running Embedded Firmware command (requires VisualGDB 5.3+).