-static bool startWith(std::string str, const char* prefix)
-{
- return strncmp(str.c_str(), prefix, strlen(prefix)) == 0;
-}
-
-void xbt_backtrace_display(xbt_backtrace_location_t* loc, std::size_t count)
-{
-#ifdef HAVE_BACKTRACE
- std::vector<std::string> backtrace = simgrid::xbt::resolve_backtrace(loc, count);
- if (backtrace.empty()) {
- fprintf(stderr, "(backtrace not set)\n");
- return;
- }
- fprintf(stderr, "Backtrace (displayed in process %s):\n", SIMIX_process_self_get_name());
- for (std::string const& s : backtrace) {
- if (startWith(s, "xbt_backtrace_display_current"))
- continue;
-
- std::fprintf(stderr, "---> '%s'\n", s.c_str());
- if (startWith(s, "SIMIX_simcall_handle") ||
- startWith(s, "simgrid::xbt::MainFunction") /* main used with thread factory */)
- break;
- }
-#else
- XBT_ERROR("Cannot display backtrace when compiled without libunwind.");
-#endif
-}
-