Comment: | Switch back to backtrace().
The reason is that __builtin_frame_address(n) for n > 0 seems to just Therefore, this commit reverts to using backtrace() from execinfo.h, if |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
f2a8bdf254c3b166d95554e7f7a08041 |
User & Date: | js on 2013-05-25 11:40:28 |
Other Links: | manifest | tags |
2013-05-26
| ||
17:24 | OFTCPSocket.h: Explicitly import objfw-defs.h. check-in: 49b741b30e user: js tags: trunk | |
2013-05-25
| ||
11:40 | Switch back to backtrace(). check-in: f2a8bdf254 user: js tags: trunk | |
2013-05-22
| ||
21:09 | Show a backtrace for uncaught exceptions. check-in: 32230a1615 user: js tags: trunk | |
Modified configure.ac from [c6b89e288b] to [fe25322d35].
︙ | |||
747 748 749 750 751 752 753 754 755 | 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 | + - + + + + + + + + + + + + | ;; esac AS_IF([test x"$have_processes" = x"yes"], [ AC_SUBST(OFPROCESS_M, "OFProcess.m") AC_DEFINE(OF_HAVE_PROCESSES, 1, [Whether we have processes]) ]) AC_DEFUN([CHECK_BUILTIN_RETURN_ADDRESS], [ AC_MSG_CHECKING(for __builtin_return_address) AC_TRY_LINK([], [ |
︙ |
Modified src/exceptions/OFException.h from [a50325ba8b] to [3edc7f9b6e].
︙ | |||
25 26 27 28 29 30 31 | 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | - + + | * * The OFException class is the base class for all exceptions in ObjFW, except * the OFAllocFailedException. */ @interface OFException: OFObject { Class _inClass; |
︙ |
Modified src/exceptions/OFException.m from [18d7beaf46] to [fbd2e39b2b].
︙ | |||
14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | + + + | * file. */ #include "config.h" #include <stdlib.h> #ifdef HAVE_EXECINFO_H # include <execinfo.h> #endif #ifdef HAVE_DLFCN_H # include <dlfcn.h> #endif #import "OFException.h" #import "OFString.h" #import "OFArray.h" |
︙ | |||
47 48 49 50 51 52 53 | 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | + + - + - - + | } - initWithClass: (Class)class { self = [super init]; _inClass = class; #if defined(HAVE_EXECINFO_H) && defined(HAVE_BACKTRACE) _backtraceSize = backtrace(_backtrace, 32); |
︙ | |||
111 112 113 114 115 116 117 | 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 | + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + | return [OFString stringWithFormat: @"An exception of class %@ occurred in class %@!", object_getClass(self), _inClass]; } - (OFArray*)backtrace { #if defined(HAVE_EXECINFO_H) && defined(HAVE_BACKTRACE) OFMutableArray *backtrace = [OFMutableArray array]; void *pool = objc_autoreleasePoolPush(); char **symbols; if (_backtraceSize < 0) return nil; symbols = backtrace_symbols(_backtrace, _backtraceSize); @try { int i; for (i = 0; i < _backtraceSize; i++) { OFString *symbol = [OFString stringWithCString: symbols[i] encoding: OF_STRING_ENCODING_NATIVE]; [backtrace addObject: symbol]; } } @finally { free(symbols); } objc_autoreleasePoolPop(pool); [backtrace makeImmutable]; return backtrace; |
︙ |