Я немного растерялся. С одной стороны, вы пишете catch(std::exception)
не работает (вы должны использовать catch(const std::exception&)
, кстати), с другой стороны, вы также пишете, что вы вызвали std::exception::what()
. Как ты это сделал, если у тебя не было std::exception
во-первых?
В любом случае, как только вы поймали что-то кроме ...
, вы можете попытаться записать информацию RTTI:
#include <typeinfo>
try {
foreign_code(my_data);
} catch(const some_type& x) {
std::cerr << "Yikes! Caught exception of type '"
<< typeid(x).name()
<< "' with its hand in the cookie jar!\n";
std::abort();
}
Хотя стандарт не делает никаких предположений о результате std::type_info::name()
, большинство (если не все) компиляторы генерируют код, который испускает что-то, что по крайней мере несколько полезно.
Когда вы находитесь в отладчике VS, вы также можете настроить его так, чтобы он останавливался при возникновении любых исключений. Это дает вам трассировку стека и, таким образом, может дать вам представление о том, какие данные, передаваемые в DLL, могут вызвать проблему.