A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
More whitespaces for codefactor.io.
[simgrid.git]
/
src
/
xbt
/
exception.cpp
diff --git
a/src/xbt/exception.cpp
b/src/xbt/exception.cpp
index a152102526c74be123150f3db04608487490f274..54a0df5216edea51e849de6580c402b9a102303c 100644
(file)
--- a/
src/xbt/exception.cpp
+++ b/
src/xbt/exception.cpp
@@
-1,4
+1,4
@@
-/* Copyright (c) 2005-20
19
. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2005-20
21
. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
@@
-37,35
+37,32
@@
void log_exception(e_xbt_log_priority_t prio, const char* context, std::exceptio
auto name = simgrid::xbt::demangle(typeid(exception).name());
auto* with_context = dynamic_cast<const simgrid::Exception*>(&exception);
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());
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, "Backtrace:\n%s", backtrace.c_str());
+ }
+ } else {
XBT_LOG(prio, "%s %s: %s", context, name.get(), exception.what());
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);
// 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();
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:
// 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");
}
}
}
}
@@
-76,8
+73,7
@@
static void show_backtrace(const simgrid::xbt::Backtrace& bt)
return;
}
std::string res = bt.resolve();
return;
}
std::string res = bt.resolve();
- XBT_CRITICAL("Current backtrace:");
- XBT_CRITICAL(" -> %s", res.c_str());
+ XBT_CRITICAL("Current backtrace:\n%s", res.c_str());
}
static std::terminate_handler previous_terminate_handler = nullptr;
}
static std::terminate_handler previous_terminate_handler = nullptr;
@@
-92,10
+88,9
@@
static void handler()
}
// Get the current backtrace and exception
}
// Get the current backtrace and exception
- auto e = std::current_exception();
simgrid::xbt::Backtrace bt = simgrid::xbt::Backtrace();
try {
simgrid::xbt::Backtrace bt = simgrid::xbt::Backtrace();
try {
- std::rethrow_exception(
e
);
+ std::rethrow_exception(
std::current_exception()
);
}
// Parse error are handled differently, as the call stack does not matter, only the file location
}
// Parse error are handled differently, as the call stack does not matter, only the file location