Upload fails at "Overriding Baud Rate" on 2/3 boards

I'm using an ATMega32U4 Pro Micro which has been working just fine for a while now. It no longer works.
Same for the Arduino Nano.
My Arduino Mega does work, however. The other two were both used for serial communication but the Mega was not.
I'm running Arduino 1.8.5. and tried again on 1.8.9.
The program utilises serial communication, if that's of concern.
The USB cables are good, haven't had trouble with them before.
The programs on the boards run.
The IDE even recognises the ports and the boards.
I've even tried plugging it in and uploading immediately to see if that helps.
I've tried all of the programmers but nothing changes.
Unplugging, off then on, restarting, trying different programs... nothing works.

Nothing seems to be working, it just sends this:

avrdude: Version 6.3-20171130
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/Users/usr/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino14/etc/avrdude.conf"
         User configuration file is "/Users/usr/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/cu.usbmodem14601
         Using Programmer              : avr109
         Overriding Baud Rate          : 57600

and then freezes. No progress at all. The Neopixel ring on my project usually freezes on upload, but it keeps cycling. If I unplug it, it complains the device wasn't found. If I leave it plugged in, after 5-10 minutes the status bar reads Done but the debug readout doesn't change, its still stuck on "Overriding Baud Rate", no progress bars or indication that anything has happened.

I'm really hoping this doesn't mean me having to buy new boards. Any idea how to fix this?
Thanks for the help!

Did you try restarting your computer?

Yes, I tried that.

This is a difficult issue to troubleshoot because there is no error message or other indication of what went wrong.

This might give more information that will provide a useful clue:

  • File > Preferences
  • Check the box next to "Show verbose output during > upload".
  • Click "OK".
  • Sketch > Upload
  • Once the upload hangs, examine the contents of the black console window at the bottom of the Arduino IDE window to see the avrdude command that the Arduino IDE ran. Select the full command with your mouse and then copy it to the clipboard.
  • Now run the command from the command line, but with the following modifications: If any paths contain a space, wrap them in quotes. Add the options -v -v -v. Each -v adds more verbosity to avrdude's output. Your command should already have one -v, adding three more gives you the maximum amount of verbosity.
  • Copy and paste the output of the avrdude command here.