------------------------------------------------------------------------------ -- -- -- GNAT RUN-TIME COMPONENTS -- -- -- -- S Y S T E M . T R A C E B A C K . S Y M B O L I C -- -- -- -- S p e c -- -- -- -- Copyright (C) 1999-2023, AdaCore -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- -- ware Foundation; either version 3, or (at your option) any later ver- -- -- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- -- or FITNESS FOR A PARTICULAR PURPOSE. -- -- -- -- As a special exception under Section 7 of GPL version 3, you are granted -- -- additional permissions described in the GCC Runtime Library Exception, -- -- version 3.1, as published by the Free Software Foundation. -- -- -- -- You should have received a copy of the GNU General Public License and -- -- a copy of the GCC Runtime Library Exception along with this program; -- -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- -- . -- -- -- -- GNAT was originally developed by the GNAT team at New York University. -- -- Extensive contributions were provided by Ada Core Technologies Inc. -- -- -- ------------------------------------------------------------------------------ -- Run-time symbolic traceback support -- The full capability is currently supported on the following targets: -- GNU/Linux x86, x86_64 -- Windows x86, x86_64 -- Note: on targets other than those listed above, a dummy implementation -- of the body returns a series of LF separated strings of the form "0x..." -- corresponding to the addresses. -- The routines provided in this package assume that your application has been -- compiled with debugging information turned on, since this information is -- used to build a symbolic traceback. -- If you want to retrieve tracebacks from exception occurrences, it is also -- necessary to invoke the binder with -E switch. Please refer to the gnatbind -- documentation for more information. -- Note that it is also possible (and often recommended) to compute symbolic -- traceback outside the program execution, which in addition allows you to -- distribute the executable with no debug info: -- -- - build your executable with debug info -- - archive this executable -- - strip a copy of the executable and distribute/deploy this version -- - at run time, compute absolute traceback (-bargs -E) from your -- executable and log it using Ada.Exceptions.Exception_Information -- - off line, compute the symbolic traceback using the executable archived -- with debug info and addr2line or gdb (using info line *) on the -- absolute addresses logged by your application. -- In order to retrieve symbolic information, functions in this package will -- read on disk all the debug information of the executable file (found via -- Argument (0), and looked in the PATH if needed) or shared libraries using -- OS facilities, and load them in memory, causing a significant cpu and -- memory overhead. -- Symbolic traceback from shared libraries is only supported for Windows and -- Linux. On other targets symbolic tracebacks are only supported for the main -- executable. You should consider using gdb to obtain symbolic traceback in -- such cases. with Ada.Exceptions; package System.Traceback.Symbolic is pragma Elaborate_Body; function Symbolic_Traceback (Traceback : System.Traceback_Entries.Tracebacks_Array) return String; function Symbolic_Traceback_No_Hex (Traceback : System.Traceback_Entries.Tracebacks_Array) return String; -- Build a string containing a symbolic traceback of the given call -- chain. Note: These procedures may be installed by Set_Trace_Decorator, -- to get a symbolic traceback on all exceptions raised (see -- System.Exception_Traces). function Symbolic_Traceback (E : Ada.Exceptions.Exception_Occurrence) return String; function Symbolic_Traceback_No_Hex (E : Ada.Exceptions.Exception_Occurrence) return String; -- Build string containing symbolic traceback of given exception occurrence -- In the above, _No_Hex means do not print any hexadecimal addresses, even -- if the symbol is not available. This is useful for getting deterministic -- output from tests. procedure Enable_Cache (Include_Modules : Boolean := False); -- Read symbolic information from binary files and cache them in memory. -- This will speed up the above functions but will require more memory. If -- Include_Modules is true, shared modules (or DLL) will also be cached. -- This procedure may do nothing if not supported. The profile of this -- subprogram may change in the future (new parameters can be added -- with default value), but backward compatibility for direct calls -- is supported. end System.Traceback.Symbolic;