C's #error preprocessor directive has the same stupid result (it generates an error condition with the custom error, then the compiler catches it and prints out a stack trace containing the entire line causing the error), so I'd say it works just fine as-is. (Not that C is the paragon of good programming language design or anything, but as long as GM isn't worse than C, I'd say it's doing its job).
Stop wasting time thinking about making good error messages, first of all - be happy you get the message and think about formatting later. What you need to do ASAP is to dump all the HDD contents on something less about to dying. Start with copying important files (if they're organized well enough that you can find them) and then just copy the entire disk to a new disk just to be sure. Tools that does this on a "raw" level (instead of a "file" level) might work better and induce less wear-and-tear on the disk.
Also, in the future, make sure to back up important files so you won't lose anything you care about even if a HDD is destroyed or lost. I personally recommend using Git to back things up since it both makes it trivial to restore a backup (git checkout <revision> in a existing repository, git clone <repo path> to restore it on a new machine, e.g. if the old one mega-died and you need to set up a new computer), and fairly easy to connect to a standard cloud service (as in Gitlab, Bitbucket - no idea if Dropbox has any native support for it).