Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix the release date in the release notes
[simgrid.git] / src / xbt / backtrace.cpp
index 03e5ad742a47a08d048ce1b0df73aa15b7a551a6..e65124319b3bbb1272dc318da29c4e720409bc03 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2005-2021. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2005-2022. 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. */
@@ -10,7 +10,6 @@
 #include <xbt/sysdep.h>
 #include <xbt/virtu.h>
 
-#include <boost/algorithm/string/predicate.hpp>
 #include <cstdio>
 #include <cstdlib>
 #include <sstream>
@@ -44,20 +43,20 @@ public:
     std::stringstream ss;
 
     int frame_count = 0;
-    int state       = 0;
+    bool print      = false;
 
-    for (boost::stacktrace::frame frame : st) {
-      if (state == 1) {
-        if (boost::starts_with(frame.name(), "simgrid::xbt::MainFunction") ||
-            boost::starts_with(frame.name(), "simgrid::kernel::context::Context::operator()()"))
+    for (boost::stacktrace::frame const& frame : st) {
+      const std::string frame_name = frame.name();
+      if (print) {
+        if (frame_name.rfind("simgrid::xbt::MainFunction", 0) == 0 ||
+            frame_name.rfind("simgrid::kernel::context::Context::operator()()", 0) == 0)
           break;
-        ss << "  ->  " << frame_count++ << "# " << frame.name() << " at " << frame.source_file() << ":"
-           << frame.source_line() << std::endl;
-        if (frame.name() == "main")
+        ss << "  ->  " << frame_count++ << "# " << frame << "\n";
+        if (frame_name == "main")
           break;
       } else {
-        if (frame.name() == "simgrid::xbt::Backtrace::Backtrace()")
-          state = 1;
+        if (frame_name == "simgrid::xbt::Backtrace::Backtrace()")
+          print = true;
       }
     }