Eclipse + wxWidgets + Boost — исключения не отображаются

Я кодировал простую программу адресной книги с графическим интерфейсом под Windows 7 x64, используя wxWidgets2.8.12 и boost :: serialization с mingw4.6 и Eclipse CDT Juno.

В то время как функциональность кодирования для сериализации записей в / из файла с использованием boost :: archive :: text_iarchive и text_oarchive, я обнаружил, что программа перестанет работать при запуске. Это просто началось бы и затем немедленно закончилось. g ++ скомпилировал это нормально, и ничего не было записано в stdout или stderr. После использования gdb для дальнейшего изучения проблемы, я обнаружил, что действительно существует исключение, создаваемое библиотекой boost.

Это само по себе не является проблемой. Проблема в том, что это исключение никогда не отображалось ни на одной из консолей Eclipse, поэтому я даже не знал, что оно существует, пока не пройдёт все приложение. Само исключение довольно просто разрешить, но оно оказалось очень проблематичным из-за недостатка выходных данных. При сборке и запуске приложения в конфигурациях Debug и Release ничего не отображается.

По сути, мой вопрос заключается в следующем: почему эти библиотечные исключения не выводятся, и что мне нужно сделать, чтобы обеспечить их правильное отображение? Я пока не смог найти ничего полезного после поиска, и любая помощь, конечно, будет оценена. Заранее спасибо всем, кто сможет помочь.

1

Решение

Хорошо, вы могли бы сделать одну вещь, хотя для этого потребуется блок catch на верхнем уровне или использование set_unexpected() это что-то вроде следующего.

#include <boost/exception/diagnostic_information.hpp>

...

catch(...)
{
std::cerr << "Unhandled exception!" << std::endl <<
boost::current_exception_diagnostic_information();
return 1; //or whatever...
}

Вы могли бы отфильтровать исключения Boost / STD, конечно, до радикальных catch(...) Но ты получил идею.

Редактировать:

Другая причина, по которой вы можете не увидеть исключение, состоит в том, что если оно вызывается (по какой-то причине) во время разматывания стека, оно затем вызывает terminate и остановиться

1

Другие решения

Других решений пока нет …