]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
function printBacktrace
authorPaul RASCLE <paul.rascle@edf.fr>
Thu, 8 Feb 2018 11:19:51 +0000 (12:19 +0100)
committerPaul RASCLE <paul.rascle@edf.fr>
Fri, 16 Feb 2018 14:15:26 +0000 (15:15 +0100)
src/Utils/Utils_ExceptHandlers.cxx

index e8778229b3a3a2386d2c6e52dc339c4e6537258d..1e96fd0fe25f2035effa01c5cc01aea4c730a7e5 100644 (file)
 
 //#define NBLINES_BACKTRACE 64
 
-void SalomeException ()
-{
-  void *stacklines[64];
-  char **stackSymbols;
-  size_t nbLines;
-  nbLines = backtrace(stacklines, 64);
-  stackSymbols = backtrace_symbols(stacklines, nbLines);
-  std::stringstream txt;
-  txt << "Salome Exception" << std::endl;
-  for (int i=0; i<nbLines; i++)
-    txt << stackSymbols[i] << std::endl;
-  throw SALOME_Exception(txt.str().c_str());
-}
-
-void SALOME_SalomeException()
+void printBacktrace(void **stacklines, int nbLines, std::stringstream& txt)
 {
-  void *stacklines[64];
-  char **stackSymbols;
-  size_t nbLines;
-  nbLines = backtrace(stacklines, 64);
-  stackSymbols = backtrace_symbols(stacklines, nbLines);
-  std::stringstream txt;
-  txt << "INTERNAL_ERROR, backtrace stack:" << nbLines << std::endl;
+  char **stackSymbols = backtrace_symbols(stacklines, nbLines);
   for (int i = 0; i < nbLines; i++)
     {
       Dl_info infodl;
@@ -86,13 +66,34 @@ void SALOME_SalomeException()
                 }
             }
           txt << " " << infodl.dli_saddr;
-
           txt << std::endl;
           free(demangled);
         }
       else
         txt << i << " " << stackSymbols[i] << std::endl;
     }
+  free(stackSymbols);
+}
+
+void SalomeException ()
+{
+  void *stacklines[64];
+  size_t nbLines;
+  nbLines = backtrace(stacklines, 64);
+  std::stringstream txt;
+  txt << "Salome Exception" << std::endl;
+  printBacktrace(stacklines, nbLines, txt);
+  throw SALOME_Exception(txt.str().c_str());
+}
+
+void SALOME_SalomeException()
+{
+  void *stacklines[64];
+  size_t nbLines;
+  nbLines = backtrace(stacklines, 64);
+  std::stringstream txt;
+  txt << "INTERNAL_ERROR, backtrace stack:" << nbLines << std::endl;
+  printBacktrace(stacklines, nbLines, txt);
   THROW_SALOME_CORBA_EXCEPTION(txt.str().c_str(), SALOME::INTERNAL_ERROR);
 }