Generally, you should only catch exceptions that you know how to handle. The purpose of exceptions bubbling up is to allow other parts of the code catch them if they can handle them, so catching all exceptions at one level is probably not going to get you a desired result.
At the top level, you may want to have a catch-all to give the user a friendly error message, and that would signal that your program is mis-handling something, and you may need to figure out how to handle it properly.
There are some cases (such as an OutOfMemoryException
), that there really is no way to gracefully handle (other than exit), and you should definitely let those bubble up at least as far as the UI for a graceful exit.