]>
Commit | Line | Data |
---|---|---|
83cce46b | 1 | ------------------------------------------------------------------------------ |
2 | -- -- | |
3 | -- GNAT RUN-TIME COMPONENTS -- | |
4 | -- -- | |
5 | -- G N A T . T R A C E B A C K . S Y M B O L I C -- | |
6 | -- -- | |
7 | -- S p e c -- | |
8 | -- -- | |
126b6848 | 9 | -- Copyright (C) 1999-2012, AdaCore -- |
83cce46b | 10 | -- -- |
11 | -- GNAT is free software; you can redistribute it and/or modify it under -- | |
12 | -- terms of the GNU General Public License as published by the Free Soft- -- | |
3ce44058 | 13 | -- ware Foundation; either version 3, or (at your option) any later ver- -- |
83cce46b | 14 | -- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- |
15 | -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- | |
3ce44058 | 16 | -- or FITNESS FOR A PARTICULAR PURPOSE. -- |
17 | -- -- | |
18 | -- As a special exception under Section 7 of GPL version 3, you are granted -- | |
19 | -- additional permissions described in the GCC Runtime Library Exception, -- | |
20 | -- version 3.1, as published by the Free Software Foundation. -- | |
21 | -- -- | |
22 | -- You should have received a copy of the GNU General Public License and -- | |
23 | -- a copy of the GCC Runtime Library Exception along with this program; -- | |
24 | -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- | |
25 | -- <http://www.gnu.org/licenses/>. -- | |
83cce46b | 26 | -- -- |
9dfe12ae | 27 | -- GNAT was originally developed by the GNAT team at New York University. -- |
28 | -- Extensive contributions were provided by Ada Core Technologies Inc. -- | |
83cce46b | 29 | -- -- |
30 | ------------------------------------------------------------------------------ | |
31 | ||
32 | -- Run-time symbolic traceback support | |
33 | ||
b2df433c | 34 | -- The full capability is currently supported on the following targets: |
11edcba1 | 35 | |
b2df433c | 36 | -- HP-UX ia64 |
eabcce03 | 37 | -- IRIX |
4e06d1d1 | 38 | -- GNU/Linux x86, x86_64, ia64 |
b2df433c | 39 | -- FreeBSD x86, x86_64 |
4e06d1d1 | 40 | -- Solaris sparc and x86 |
b2df433c | 41 | -- OpenVMS Alpha and ia64 |
42 | -- Windows | |
83cce46b | 43 | |
3ab42ff7 | 44 | -- Note: on targets other than those listed above, a dummy implementation of |
45 | -- the body returns a series of LF separated strings of the form "0x..." | |
46 | -- corresponding to the addresses. | |
47 | ||
83cce46b | 48 | -- The routines provided in this package assume that your application has |
49 | -- been compiled with debugging information turned on, since this information | |
50 | -- is used to build a symbolic traceback. | |
9dfe12ae | 51 | |
780ad7cd | 52 | -- If you want to retrieve tracebacks from exception occurrences, it is also |
53 | -- necessary to invoke the binder with -E switch. Please refer to the gnatbind | |
54 | -- documentation for more information. | |
55 | ||
56 | -- Note that it is also possible (and often recommended) to compute symbolic | |
57 | -- traceback outside the program execution, which in addition allows you | |
58 | -- to distribute the executable with no debug info: | |
59 | -- | |
60 | -- - build your executable with debug info | |
61 | -- - archive this executable | |
62 | -- - strip a copy of the executable and distribute/deploy this version | |
63 | -- - at run time, compute absolute traceback (-bargs -E) from your | |
eabcce03 | 64 | -- executable and log it using Ada.Exceptions.Exception_Information |
780ad7cd | 65 | -- - off line, compute the symbolic traceback using the executable archived |
66 | -- with debug info and addr2line or gdb (using info line *<addr>) on the | |
67 | -- absolute addresses logged by your application. | |
80d4fec4 | 68 | |
f15731c4 | 69 | -- In order to retrieve symbolic information, functions in this package will |
3670c51d | 70 | -- read on disk all the debug information of the executable file (found via |
eabcce03 | 71 | -- Argument (0), and looked in the PATH if needed), and load them in memory, |
72 | -- causing a significant cpu and memory overhead. | |
9dfe12ae | 73 | |
e2aa7314 | 74 | -- On all platforms except VMS, this package is not intended to be used |
75 | -- within a shared library, symbolic tracebacks are only supported for the | |
44d43e97 | 76 | -- main executable and not for shared libraries. You should consider using |
77 | -- gdb to obtain symbolic traceback in such cases. | |
9dfe12ae | 78 | |
e2aa7314 | 79 | -- On VMS, there is no restriction on using this facility with shared |
80 | -- libraries. However, the OS should be at least v7.3-1 and OS patch | |
81 | -- VMS731_TRACE-V0100 must be applied in order to use this package. | |
83cce46b | 82 | |
b2df433c | 83 | -- On platforms where the full capability is not supported, function |
84 | -- Symbolic_Traceback return a list of addresses expressed as "0x..." | |
85 | -- separated by line feed. | |
86 | ||
83cce46b | 87 | with Ada.Exceptions; use Ada.Exceptions; |
88 | ||
89 | package GNAT.Traceback.Symbolic is | |
1a1b0b9b | 90 | pragma Elaborate_Body; |
83cce46b | 91 | |
83cce46b | 92 | function Symbolic_Traceback (Traceback : Tracebacks_Array) return String; |
3ab42ff7 | 93 | -- Build a string containing a symbolic traceback of the given call chain. |
cbe48986 | 94 | -- Note: This procedure may be installed by Set_Trace_Decorator, to get a |
95 | -- symbolic traceback on all exceptions raised (see GNAT.Exception_Traces). | |
83cce46b | 96 | |
97 | function Symbolic_Traceback (E : Exception_Occurrence) return String; | |
9dfe12ae | 98 | -- Build string containing symbolic traceback of given exception occurrence |
83cce46b | 99 | |
100 | end GNAT.Traceback.Symbolic; |