iirc libexecinfo doesn't exactly work correctly. You could try
linking it with marco's backtrace library instead,

http://opensource.conformal.com/cgi-bin/cvsweb/backtrace/backtrace/

I don't know who can help with the ObjC exception handling problem
though..


On 2011-06-13, Sebastian Reitenbach <[email protected]> wrote:
> Hi,
>
> I'm trying to chase a hanger I observe in gnustep based programs. The hang is 
> related to exception handling in gnustep. When an exception is raised, a 
> backtrace is created. When backtrace() is not available, gnustep-base tries 
> to create one on its own, and while there it hangs, where I did not yet 
> figured out, what the actual problem is. However, I was pointed to 
> libexecinfo, which also provides backtrace(). So I tweaked gnustep-base a bit 
> to detect and link against libexecinfo.
>
> However, now the programs crash in libexecinfo. The backtrace looks like sth. 
> like this:
>
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to process 15312, thread 0x87c35800]
> 0x0d95e0f1 in getreturnaddr (level=103) at stacktraverse.c:116
> 116         case 103: return __builtin_return_address(104);
> (gdb) bt
> #0  0x0d95e0f1 in getreturnaddr (level=104) at stacktraverse.c:116
> #1  0x0d95aa85 in backtrace (buffer=0x7cc42e00, size=127) at execinfo.c:60
> #2  0x00ea5b77 in -[GSStackTrace init] (self=0x81fda7e8, _cmd=0x20e875a8) at 
> NSException.m:594
> #3  0x00ef9b58 in +[NSObject new] (self=0x20e6e300, _cmd=0x20e6e3a0) at 
> NSObject.m:1159
> #4  0x00ea6c7f in -[NSException raise] (self=0x81fda0a8, _cmd=0x20e6e400) at 
> NSException.m:960
> #5  0x00ea6341 in +[NSException raise:format:arguments:] (self=0x20e6e200, 
> _cmd=0x20e6e3e8, name=0x3c005fe8, format=0x3c005ff4, argList=0xcfbd27e0 "") 
> at NSException.m:849
> #6  0x00ea6279 in +[NSException raise:format:] (self=0x20e6e200, 
> _cmd=0x3c006648, name=0x3c005fe8, format=0x3c005ff4) at NSException.m:835
> #7  0x1c00747b in -[Sudoku doFind:] (self=0x89023008, _cmd=0x3c006628, 
> seen=0x84c57b88) at Sudoku.m:418
> #8  0x1c0078b5 in -[Sudoku doFind:] (self=0x89023008, _cmd=0x3c006628, 
> seen=0x84c57b88) at Sudoku.m:487
> ...
> #86 0x1c0078b5 in -[Sudoku doFind:] (self=0x89023008, _cmd=0x3c006628, 
> seen=0x84c57b88) at Sudoku.m:487
> #87 0x1c0078b5 in -[Sudoku doFind:] (self=0x89023008, _cmd=0x3c006628, 
> seen=0x84c57b88) at Sudoku.m:487
> #88 0x1c0078b5 in -[Sudoku doFind:] (self=0x89023008, _cmd=0x3c006628, 
> seen=0x84c57b88) at Sudoku.m:487
> #89 0x1c00726a in -[Sudoku find] (self=0x89023008, _cmd=0x3c002468) at 
> Sudoku.m:371
> #90 0x1c001dfe in -[Controller newPuzzle:] (self=0x7f69c4e8, _cmd=0x3c0089f8, 
> sender=0x87c01f08) at Controller.m:102
> #91 0x03fa3009 in -[NSApplication sendAction:to:from:] (self=0x7f2c3688, 
> _cmd=0x23f505f8, aSelector=0x3c0089f8, aTarget=0x0, sender=0x87c01f08) at 
> NSApplication.m:2259
> #92 0x04079380 in -[NSMenu performActionForItemAtIndex:] (self=0x87c01a88, 
> _cmd=0x23f53100, index=2) at NSMenu.m:1320
> #93 0x04083d59 in -[NSMenuView _trackWithEvent:] (self=0x7edfb108, 
> _cmd=0x23f53188, event=0x874c6788) at NSMenuView.m:1785
> #94 0x04083e3c in -[NSMenuView trackWithEvent:] (self=0x7edfb108, 
> _cmd=0x23f531d8, event=0x874c6f08) at NSMenuView.m:1808
> #95 0x0408400b in -[NSMenuView mouseDown:] (self=0x7edfb108, _cmd=0x23facdf0, 
> theEvent=0x874c6f08) at NSMenuView.m:1847
> #96 0x0416d1e1 in -[NSWindow sendEvent:] (self=0x7e088808, _cmd=0x23f01690, 
> theEvent=0x874c6f08) at NSWindow.m:3694
> #97 0x03fa2aa8 in -[NSApplication sendEvent:] (self=0x7f2c3688, 
> _cmd=0x23f015c8, theEvent=0x874c6f08) at NSApplication.m:2134
> #98 0x03fa1223 in -[NSApplication run] (self=0x7f2c3688, _cmd=0x23ef6d80) at 
> NSApplication.m:1591
> #99 0x03f7ed8f in NSApplicationMain (argc=1, argv=0xcfbdc36c) at 
> Functions.m:89
> #100 0x1c00bac0 in gnustep_base_user_main (argc=1, argv=0xcfbdc36c, 
> env=0xcfbdc374) at main.m:168
> #101 0x00f23c3c in main (argc=1, argv=0xcfbdc36c, env=0xcfbdc374) at 
> NSProcessInfo.m:979
> #102 0x1c001507 in ___start ()
> #103 0x1c001487 in _start ()
> #104 0x00000000 in ?? ()
> (gdb) frame 0
> #0  0x0d95e0f1 in getframeaddr (level=104) at stacktraverse.c:262
> 262         case 104: return __builtin_frame_address(105);
> (gdb) frame 1
> #1  0x0d95aa85 in backtrace (buffer=0x7cc42e00, size=127) at execinfo.c:60
> 60          for (i = 1; getframeaddr(i + 1) != NULL && i != size + 1; i++) {
> (gdb) list
> 56      backtrace(void **buffer, int size)
> 57      {
> 58          int i;
> 59
> 60          for (i = 1; getframeaddr(i + 1) != NULL && i != size + 1; i++) {
> 61              buffer[i - 1] = getreturnaddr(i);
> 62              if (buffer[i - 1] == NULL)
> 63                  break;
> 64          }
> 65
>
> This happens for me on i386, with a snapshot from beginning last week.
> So wondering why this is crashing for me in __builtin_frame_address()
>
> Sebastian
>
>

Reply via email to