| ------------------------------------------------------------------------------ |
| -- -- |
| -- 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-2022, 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 -- |
| -- <http://www.gnu.org/licenses/>. -- |
| -- -- |
| -- 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 *<addr>) 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; |