auto name = simgrid::xbt::demangle(typeid(exception).name());
auto* with_context = dynamic_cast<const simgrid::Exception*>(&exception);
- if (with_context != nullptr)
+ if (with_context != nullptr) {
XBT_LOG(prio, "%s %s by %s/%d: %s", context, name.get(), with_context->throw_point().procname_.c_str(),
with_context->throw_point().pid_, exception.what());
- else
+ // Do we have a backtrace?
+ if (not simgrid::config::get_value<bool>("exception/cutpath")) {
+ auto backtrace = with_context->resolve_backtrace();
+ XBT_LOG(prio, " -> %s", backtrace.c_str());
+ }
+ } else {
XBT_LOG(prio, "%s %s: %s", context, name.get(), exception.what());
-
- // Do we have a backtrace?
- if (with_context != nullptr && not simgrid::config::get_value<bool>("exception/cutpath")) {
- auto backtrace = with_context->resolve_backtrace();
- XBT_LOG(prio, " -> %s", backtrace.c_str());
}
+ } catch (...) {
+ // Don't log exceptions we got when trying to log exception
+ XBT_LOG(prio, "Ignoring exception caught while while trying to log an exception!");
+ }
+ try {
// Do we have a nested exception?
auto* with_nested = dynamic_cast<const std::nested_exception*>(&exception);
- if (with_nested == nullptr || with_nested->nested_ptr() == nullptr)
- return;
- try {
+ if (with_nested != nullptr && with_nested->nested_ptr() != nullptr)
with_nested->rethrow_nested();
- } catch (const std::exception& nested_exception) {
- log_exception(prio, "Caused by", nested_exception);
- }
+ } catch (const std::exception& nested_exception) {
+ log_exception(prio, "Caused by", nested_exception);
+ } catch (...) {
// We could catch nested_exception or WithContextException but we don't bother:
- catch (...) {
- XBT_LOG(prio, "Caused by an unknown exception");
- }
- }
- catch (...) {
- // Don't log exceptions we got when trying to log exception
- XBT_LOG(prio, "Ignoring exception caught while while trying to log an exception!");
+ XBT_LOG(prio, "Caused by an unknown exception");
}
}
static void basic_test(simgrid::dwarf::ExpressionContext const& state)
{
- try {
- std::array<Dwarf_Op, 60> ops;
+ std::array<Dwarf_Op, 60> ops;
- uintptr_t a = rnd_engine();
- uintptr_t b = rnd_engine();
+ uintptr_t a = rnd_engine();
+ uintptr_t b = rnd_engine();
- simgrid::dwarf::ExpressionStack stack;
+ simgrid::dwarf::ExpressionStack stack;
- bool caught_ex = false;
- try {
- ops[0].atom = DW_OP_drop;
- simgrid::dwarf::execute(ops.data(), 1, state, stack);
- } catch (const simgrid::dwarf::evaluation_error&) {
- caught_ex = true;
- }
- if (not caught_ex)
- fprintf(stderr, "Exception expected");
+ bool caught_ex = false;
+ try {
+ ops[0].atom = DW_OP_drop;
+ simgrid::dwarf::execute(ops.data(), 1, state, stack);
+ } catch (const simgrid::dwarf::evaluation_error&) {
+ caught_ex = true;
+ }
+ if (not caught_ex)
+ fprintf(stderr, "Exception expected");
+ try {
ops[0].atom = DW_OP_lit21;
simgrid::dwarf::execute(ops.data(), 1, state, stack);
assert(stack.size() == 1);