>>237 いいこと言った。
簡単に説明すると深いところで起きたエラーを浅いところでcatchしたいんです。
で、それぞれの所でcatchしてすぐにthrowしてるんです。
237さん、どうでしょう?

main(){
  try{
    f()
  }catch(Exception& e){
    cout << e.GetMessage();
  }
}

void f(){
  try{ g(); }catch(Exception& e){throw e;}
}

void g(){
  try{
    hoge();
    hage();
}catch(Exception& e){throw e;}
}

hoge(){
  if(ぬるぽ) throw Exception("ぬるぽ");
}

hage(){
  if(ぬるぽ) throw Exception("ぬるぽ");
}