Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Make BacktraceImpl::resolve a bit faster.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Wed, 7 Apr 2021 09:07:16 +0000 (11:07 +0200)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Wed, 7 Apr 2021 09:08:39 +0000 (11:08 +0200)
Print the full frame information all at once.

src/xbt/backtrace.cpp

index 03e5ad7..7324dca 100644 (file)
@@ -44,20 +44,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 (boost::starts_with(frame_name, "simgrid::xbt::MainFunction") ||
+            boost::starts_with(frame_name, "simgrid::kernel::context::Context::operator()()"))
           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;
       }
     }