Я столкнулся с любопытным сценарием, в котором следующий маловероятный код:
try{
throw Core::ValueError();
}
catch (Core::Error &e){
...
}
(ValueError наследует от Error наследует от std :: exception)
приводит к тому, что исключение перехватывается, еслискомпилировано в исполняемый файл, но не в том случае, если оно скомпилировано в определенную общую библиотеку.
И вот мои вопросы:
Какие инструменты и / или методы отладки можно использовать для просмотравнутри черного ящика, который является процессом обработки исключений?Могу ли я пройти через это с помощью GDB?
Есть ли какая-либо информация, которую я мог бы извлечь из заголовков Mach-o, которая могла бы рассказать мне что-нибудь о возможности улова (если хотите) определенных исключений некоторыми пунктами catch?В частности, могу ли я посмотреть, скажем, раздел «gcc_except_tab» с его прекрасными LSDA, или таблицей символов, или другой частью, и вывести любую проблему с видимостью символа или другую проблему, связанную с перехватом исключений?
Я нашел онлайн-источник, в котором было заявлено о решении, использующем курицу, семь крысиных хвостов и ускоритель частиц, но я решил, что сначала попробую StackOverflow и оставлю черную магию в качестве последнего средства.
(у меня работает i686-apple-darwin10-g ++ - 4.2.1 на OSX 10.6.7)