bug-gnustep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

GNUstep on Darwin/NeXT runtime: pseudo-fix for NSAutoreleasePool, infini


From: Lars Sonchocky-Helldorf
Subject: GNUstep on Darwin/NeXT runtime: pseudo-fix for NSAutoreleasePool, infinite loop in [NSObject forward::] in correlation with NSInvocation
Date: Mon, 3 Jun 2002 18:52:45 +0200

Hi,

while debuging GNUstep on Darwin/NeXT runtime I found the following 
issues:

1. NSAutoreleasePool comparison in line 129 does not work. 

here is a backtrace (with some additional fprints in it):

(gdb) break [NSAutoreleasePool initialize]
Breakpoint 1 at 0x58b594: file NSAutoreleasePool.m, line 129.
(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: 
/Volumes/Data/Projekte/GNUstep-Darwin/core/base/Examples/shared_debug_obj/powerpc/darwin5/nx-gnu-gnu/dictionary
 

[Switching to process 7496 thread 0x1907]
Temporarily disabling shared library breakpoints: 1
Re-enabling shared library breakpoints: 1
_class_lookupMethodAndLoadCache() Class: Protocol Method: 
_fixup:numElements:
class_initialize(): Protocol
class_initialize(): Object
_class_lookupMethodAndLoadCache() Class: Object Method: initialize
class_initialize(): Object
_class_lookupMethodAndLoadCache() Class: Protocol Method: initialize
class_initialize(): Protocol
_class_lookupMethodAndLoadCache() Class: NSAutoreleasePool Method: new
class_initialize(): NSAutoreleasePool
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSObject Method: initialize
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSObject Method: class
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSRecursiveLock Method: alloc
class_initialize(): NSRecursiveLock
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSRecursiveLock Method: 
initialize
class_initialize(): NSRecursiveLock
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSObject Method: class
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSRecursiveLock Method: 
allocWithZone:
_class_lookupMethodAndLoadCache() Class: NSRecursiveLock Method: init
_class_lookupMethodAndLoadCache() Class: NSObject Method: init
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSZombie Method: class
class_initialize(): NSZombie
_class_lookupMethodAndLoadCache() Class: NSZombie Method: initialize
class_initialize(): NSZombie
_class_lookupMethodAndLoadCache() Class: NSZombie Method: forward::
class_initialize(): NSZombie
_class_lookupMethodAndLoadCache() Class: NSString Method: 
stringWithCString:
class_initialize(): NSString
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSString Method: initialize
class_initialize(): NSString
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSString Method: class
class_initialize(): NSString
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSString Method: allocWithZone:
_class_lookupMethodAndLoadCache() Class: NSString Method: 
initWithCString:length:
_class_lookupMethodAndLoadCache() Class: NSString Method: 
initWithCStringNoCopy:length:freeWhenDone:
_class_lookupMethodAndLoadCache() Class: NSString Method: zone
_class_lookupMethodAndLoadCache() Class: NSString Method: release
_class_lookupMethodAndLoadCache() Class: NSString Method: dealloc
_class_lookupMethodAndLoadCache() Class: NSString Method: zone
_class_lookupMethodAndLoadCache() Class: NSAutoreleasePool Method: new
class_initialize(): NSAutoreleasePool
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSAutoreleasePool Method: 
initialize
class_initialize(): NSAutoreleasePool
class_initialize(): NSObject

Breakpoint 1, +[NSAutoreleasePool initialize] (self=0x6a3938, 
_cmd=0x1179fc) at NSAutoreleasePool.m:129
129       if (self == [NSAutoreleasePool class])
(gdb) step
Current language:  auto; currently objective-c
_class_lookupMethodAndLoadCache() Class: NSAutoreleasePool Method: class
class_initialize(): NSAutoreleasePool
class_initialize(): NSObject
-[NSObject class] (self=0x6a3938, _cmd=0x1179c8) at NSObject.m:1048
1048      return object_get_class(self);
(gdb) step
1049    }
(gdb) step
+[NSAutoreleasePool initialize] (self=0x6a3938, _cmd=0x1179fc) at 
NSAutoreleasePool.m:134
134     }
(gdb) step
class_initialize (cls=0x6a3938) at runtime/objc-class.m:2074
2074            pthread_mutex_lock(&classInitLock);
(gdb) step
2075            *infoP = (*infoP | CLS_INITIALIZED) & ~CLS_INITIALIZING;
(gdb) step
2076            pthread_cond_broadcast(&classInitWaitCond);
(gdb) step
2077            pthread_mutex_unlock(&classInitLock);
(gdb) step
2078            _setThisThreadIsNotInitializingClass(cls);
(gdb) step
_setThisThreadIsNotInitializingClass (cls=0x6a3938) at 
runtime/objc-class.m:2000
2000        _objc_initializing_classes *list = 
_fetchInitializingClassList(NO);
(gdb) step
_fetchInitializingClassList (create=0 '\000') at runtime/objc-class.m:1883
1883        data = pthread_getspecific(_objc_pthread_key);
(gdb) step
1884        if (data == NULL) {
(gdb) step
1893        list = data->initializingClasses;
(gdb) step
1894        if (list == NULL) {
(gdb) step
1903        classes = list->metaclasses;
(gdb) step
1904        if (classes == NULL) {
(gdb) step
1912        return list;
(gdb) step
1913    }
(gdb) step
_setThisThreadIsNotInitializingClass (cls=0x6a3938) at 
runtime/objc-class.m:2001
2001        if (list) {
(gdb) step
2002            cls = GETMETA(cls); 
(gdb) step
2003            for (i = 0; i < list->classesAllocated; i++) {
(gdb) step
2004                if (cls == list->metaclasses[i]) {
(gdb) step
2003            for (i = 0; i < list->classesAllocated; i++) {
(gdb) step
2004                if (cls == list->metaclasses[i]) {
(gdb) step
2003            for (i = 0; i < list->classesAllocated; i++) {
(gdb) step
2004                if (cls == list->metaclasses[i]) {
(gdb) step
2005                    list->metaclasses[i] = NULL;
(gdb) step
2006                    return;
(gdb) step
2013    }
(gdb) step
class_initialize (cls=0x6a3938) at runtime/objc-class.m:2079
2079            return;
(gdb) step
2116    }
(gdb) step
_class_lookupMethodAndLoadCache (cls=0x6a5e28, sel=0x1179f0) at 
runtime/objc-class.m:2151
2151        trace(0xb302, 0, 0, 0);
(gdb) step
2155        for (curClass = cls; curClass; curClass = ((struct objc_class 
* )curClass)->super_class)
(gdb) step
2161            trace(0xb303, 0, 0, 0);
(gdb) step
2167            meth = _cache_getMethod(curClass, sel);
(gdb) step
2168            if (meth) {
(gdb) step
2186            trace(0xb304, (int)methodPC, 0, 0);
(gdb) step
2190            meth = _findMethodInClass(curClass, sel);
(gdb) step
_findMethodInClass (cls=0x6a5e28, sel=0x1179f0) at 
runtime/objc-class.m:616
616         void *iterator = 0;
(gdb) step
617         while ((mlist = _class_inlinedNextMethodList(cls, &iterator))) 
{
(gdb) step
_class_inlinedNextMethodList (cls=0x6a5e28, it=0xbfffea84) at 
runtime/objc-private.h:167
167             iterator = (struct objc_method_list***)it;
(gdb) step
168             if (*iterator == NULL) {
(gdb) step
169                 *iterator = &((((struct objc_class *) 
cls)->methodLists)[0]);
(gdb) step
170             }
(gdb) step
173             if ((**iterator == NULL) || (**iterator == 
END_OF_METHODS_LIST)) {
(gdb) step
178             **iterator = 
_objc_inlined_fixup_selectors_in_method_list(**iterator);
(gdb) step
_objc_inlined_fixup_selectors_in_method_list (mlist=0x57ce0) at 
runtime/objc-private.h:144
144             if ( ! mlist ) return (struct objc_method_list *)0;
(gdb) step
145             if ( mlist->obsolete != _OBJC_FIXED_UP ) {
(gdb) step
157             return mlist;
(gdb) step
158         }
(gdb) step
_class_inlinedNextMethodList (cls=0x6a5e28, it=0xbfffea84) at 
runtime/objc-private.h:181
181             return **iterator;
(gdb) step
182         }
(gdb) step
_findMethodInClass (cls=0x6a5e28, sel=0x1179f0) at 
runtime/objc-class.m:618
618             Method m = _findMethodInList(mlist, sel);
(gdb) step
_findMethodInList (mlist=0x57ce0, sel=0x1179f0) at 
runtime/objc-class.m:604
604         if (!mlist) return NULL;
(gdb) step
605         for (i = 0; i < mlist->method_count; i++) {
(gdb) step
606             Method m = &mlist->method_list[i];
(gdb) step
607             if (m->method_name == sel) {
(gdb) step
610         }
(gdb) step
606             Method m = &mlist->method_list[i];
(gdb) step
607             if (m->method_name == sel) {
(gdb) step
610         }
(gdb) step
606             Method m = &mlist->method_list[i];
(gdb) step
607             if (m->method_name == sel) {
(gdb) step
610         }
(gdb) step
606             Method m = &mlist->method_list[i];
(gdb) step
607             if (m->method_name == sel) {
(gdb) step
610         }
(gdb) step
606             Method m = &mlist->method_list[i];
(gdb) step
607             if (m->method_name == sel) {
(gdb) step
610         }
(gdb) step
606             Method m = &mlist->method_list[i];
(gdb) step
607             if (m->method_name == sel) {
(gdb) step
610         }
(gdb) step
606             Method m = &mlist->method_list[i];
(gdb) step
607             if (m->method_name == sel) {
(gdb) step
610         }
(gdb) step
606             Method m = &mlist->method_list[i];
(gdb) step
607             if (m->method_name == sel) {
(gdb) step
610         }
(gdb) step
606             Method m = &mlist->method_list[i];
(gdb) step
607             if (m->method_name == sel) {
(gdb) step
610         }
(gdb) step
606             Method m = &mlist->method_list[i];
(gdb) step
607             if (m->method_name == sel) {
(gdb) step
608                 return m;
(gdb) step
612     }
(gdb) step
_findMethodInClass (cls=0x6a5e28, sel=0x1179f0) at 
runtime/objc-class.m:619
619             if (m) return m;
(gdb) step
622     }
(gdb) step
_class_lookupMethodAndLoadCache (cls=0x6a5e28, sel=0x1179f0) at 
runtime/objc-class.m:2191
2191            if (meth) {
(gdb) step
2194                if ((objcMsgLogEnabled == 0) ||
(gdb) step
2206                    _cache_fill (cls, meth, sel);
(gdb) step
_cache_fill (cls=0x6a5e28, smt=0x57d54, sel=0x1179f0) at 
runtime/objc-class.m:1652
1652        if (!ISINITIALIZED(cls)) {
(gdb) step
1657        totalCacheFills += 1;
(gdb) step
1659        OBJC_LOCK(&cacheUpdateLock);
(gdb) step
1661        cache = ((struct objc_class *)cls)->cache;
(gdb) step
1664        if (traceDuplicates)
(gdb) step
1695        if (_cache_getImp(cls, sel)) {
(gdb) step
1701        newOccupied = cache->occupied + 1;
(gdb) step
1702        if ((newOccupied * 4) <= (cache->mask + 1) * 3) {
(gdb) step
1707            if ((((struct objc_class * )cls)->info & CLS_FLUSH_CACHE) 
!= 0) {
(gdb) step
1710                cache = _cache_expand (cls);
(gdb) step
_cache_expand (cls=0x6a5e28) at runtime/objc-class.m:1437
1437        old_cache = ((struct objc_class *)cls)->cache;
(gdb) step
1438        if (old_cache == &emptyCache)
(gdb) step
1439            return _cache_create (cls);
(gdb) step
_cache_create (cls=0x6a5e28) at runtime/objc-class.m:1402
1402        slotCount = (ISMETA(cls)) ? INIT_META_CACHE_SIZE : 
INIT_CACHE_SIZE;
(gdb) step
1404        new_cache = _cache_malloc(slotCount);
(gdb) step
_cache_malloc (slotCount=4) at runtime/objc-class.m:1375
1375        size = sizeof(struct objc_cache) + TABLE_SIZE(slotCount);
(gdb) step
1379        new_cache = malloc_zone_calloc (_objc_create_zone(), size, 1);
(gdb) step
_objc_create_zone () at runtime/objc-class.m:2559
2559        if ( _objc_z == (void *)0xffffffff ) {
(gdb) step
2571        return _objc_z;
(gdb) step
2572    }
(gdb) step
_cache_malloc (slotCount=4) at runtime/objc-class.m:1384
1384        new_cache->mask = slotCount - 1;
(gdb) step
1386        return new_cache;
(gdb) step
1387    }
(gdb) step
_cache_create (cls=0x6a5e28) at runtime/objc-class.m:1407
1407        ((struct objc_class *)cls)->cache = new_cache;
(gdb) step
1411        ((struct objc_class * )cls)->info &= ~(CLS_FLUSH_CACHE);
(gdb) step
1416        if (_class_slow_grow)
(gdb) step
1417            ((struct objc_class * )cls)->info &= ~(CLS_GROW_CACHE);
(gdb) step
1420        return new_cache;
(gdb) step
1421    }
(gdb) step
_cache_expand (cls=0x6a5e28) at runtime/objc-class.m:1565
1565    }
(gdb) step
_cache_fill (cls=0x6a5e28, smt=0x57d54, sel=0x1179f0) at 
runtime/objc-class.m:1714
1714            cache->occupied += 1;
(gdb) step
1728        buckets     = cache->buckets;
(gdb) step
1729        index       = CACHE_HASH(sel, cache->mask); 
(gdb) step
1736            saveMethod = buckets[index];
(gdb) step
1739            buckets[index] = smt;
(gdb) step
1742            if (saveMethod == NULL)
(gdb) step
1743                break;
(gdb) step
1753        OBJC_UNLOCK(&cacheUpdateLock);
(gdb) step
1755        return YES; // successfully added new cache entry
(gdb) step
1756    }
(gdb) step
_class_lookupMethodAndLoadCache (cls=0x6a5e28, sel=0x1179f0) at 
runtime/objc-class.m:2210
2210                methodPC = meth->method_imp;
(gdb) step
2211                break;
(gdb) step
2217        trace(0xb306, (int)methodPC, 0, 0);
(gdb) step
2219        if (methodPC == NULL)
(gdb) step
2226        trace(0xb30f, (int)methodPC, 0, 0);
(gdb) step
2228        return methodPC;
(gdb) step
2229    }
(gdb) step
0x00116bbc in objc_msgSend ()
(gdb) step
Single stepping until exit from function objc_msgSend, 
which has no line number information.
+[NSAutoreleasePool new] (self=0x6a3938, _cmd=0x1179f0) at 
NSAutoreleasePool.m:149
149       id arp = (*allocImp)(self, @selector(allocWithZone:), 
NSDefaultMallocZone());
(gdb) step
NSDefaultMallocZone () at ../Headers/Foundation/NSZone.h:178
178       return __nszone_private_hidden_default_zone;
(gdb) step
179     }
(gdb) step

Program received signal EXC_BAD_ACCESS, Could not access memory.
0x00000000 in ?? ()
(gdb) 

I fiddled around with line 129 trying several comparisons. The only one 
that worked so far is the following. I know, it looks ugly, maybe someone 
has abetter solution for this:

  if ((((struct objc_class*)(self))->name) == ((((struct 
objc_class*)(self))->isa)->name))

here is a backtrace that shows this:

(gdb) break [NSObject forward::]
Breakpoint 1 at 0x5feb64: file NSObject.m, line 939.
(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: 
/Volumes/Data/Projekte/GNUstep-Darwin/core/base/Examples/shared_debug_obj/powerpc/darwin5/nx-gnu-gnu/dictionary
 

[Switching to process 700 thread 0x1907]
Temporarily disabling shared library breakpoints: 1
Re-enabling shared library breakpoints: 1
_class_lookupMethodAndLoadCache() Class: Protocol Method: 
_fixup:numElements:
class_initialize(): Protocol
class_initialize(): Object
_class_lookupMethodAndLoadCache() Class: Object Method: initialize
class_initialize(): Object
_class_lookupMethodAndLoadCache() Class: Protocol Method: initialize
class_initialize(): Protocol
_class_lookupMethodAndLoadCache() Class: NSAutoreleasePool Method: new
class_initialize(): NSAutoreleasePool
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSObject Method: initialize
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSObject Method: class
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSRecursiveLock Method: alloc
class_initialize(): NSRecursiveLock
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSRecursiveLock Method: 
initialize
class_initialize(): NSRecursiveLock
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSObject Method: class
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSRecursiveLock Method: 
allocWithZone:
_class_lookupMethodAndLoadCache() Class: NSRecursiveLock Method: init
_class_lookupMethodAndLoadCache() Class: NSObject Method: init
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSZombie Method: class
class_initialize(): NSZombie
_class_lookupMethodAndLoadCache() Class: NSZombie Method: initialize
class_initialize(): NSZombie
_class_lookupMethodAndLoadCache() Class: NSZombie Method: forward::
class_initialize(): NSZombie
[NSZombie forward::] aSel: initialize
_class_lookupMethodAndLoadCache() Class: NSString Method: 
stringWithCString:
class_initialize(): NSString
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSString Method: initialize
class_initialize(): NSString
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSString Method: class
class_initialize(): NSString
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSString Method: allocWithZone:
_class_lookupMethodAndLoadCache() Class: NSString Method: 
initWithCString:length:
_class_lookupMethodAndLoadCache() Class: NSString Method: 
initWithCStringNoCopy:length:freeWhenDone:
_class_lookupMethodAndLoadCache() Class: NSString Method: zone
_class_lookupMethodAndLoadCache() Class: NSString Method: release
_class_lookupMethodAndLoadCache() Class: NSString Method: dealloc
_class_lookupMethodAndLoadCache() Class: NSString Method: zone
_class_lookupMethodAndLoadCache() Class: NSAutoreleasePool Method: new
class_initialize(): NSAutoreleasePool
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSAutoreleasePool Method: 
initialize
class_initialize(): NSAutoreleasePool
class_initialize(): NSObject
(((struct objc_class*)(self))->name): NSAutoreleasePool
((((struct objc_class*)(self))->isa)->name): NSAutoreleasePool
_class_lookupMethodAndLoadCache() Class: NSAutoreleasePool Method: 
methodForSelector:
class_initialize(): NSAutoreleasePool
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSAutoreleasePool Method: 
instanceMethodForSelector:
class_initialize(): NSAutoreleasePool
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSAutoreleasePool Method: 
forward::
class_initialize(): NSAutoreleasePool
class_initialize(): NSObject

Breakpoint 1, -[NSObject forward::] (self=0x6a5938, _cmd=0x117a98, 
aSel=0x13a248, argFrame=0xbfffe990) at NSObject.m:939
939             printf("[NSObject forward::] aSel: %s\n", aSel);
(gdb) cont
Continuing.
Current language:  auto; currently objective-c
[NSObject forward::] aSel: instanceMethodForSelector:
_class_lookupMethodAndLoadCache() Class: NSInvocation Method: alloc
class_initialize(): NSInvocation
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSInvocation Method: initialize
class_initialize(): NSInvocation
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSInvocation Method: class
class_initialize(): NSInvocation
class_initialize(): NSObject
_class_lookupMethodAndLoadCache() Class: NSInvocation Method: forward::

Breakpoint 1, -[NSObject forward::] (self=0x6a6178, _cmd=0x117a98, 
aSel=0x1179e8, argFrame=0xbfffe880) at NSObject.m:939
939             printf("[NSObject forward::] aSel: %s\n", aSel);
(gdb) step
[NSObject forward::] aSel: alloc
940       inv = AUTORELEASE([[NSInvocation alloc] initWithArgframe: 
argFrame
(gdb) step
Unable to determine target of Objective-C method call (ignoring):
Error accessing memory address 0x3: Invalid argument.

Breakpoint 1, -[NSObject forward::] (self=0x6a6178, _cmd=0x117a98, 
aSel=0x1179e8, argFrame=0xbfffe770) at NSObject.m:939
939             printf("[NSObject forward::] aSel: %s\n", aSel);
(gdb) bt
#0  -[NSObject forward::] (self=0x6a6178, _cmd=0x117a98, aSel=0x1179e8, 
argFrame=0xbfffe770) at NSObject.m:939
#1  0x001171c4 in _objc_msgForward ()
#2  0x005feb90 in -[NSObject forward::] (self=0x6a6178, _cmd=0x117a98, 
aSel=0x1179e8, argFrame=0xbfffe880) at NSObject.m:940
#3  0x001171c4 in _objc_msgForward ()
#4  0x005feb90 in -[NSObject forward::] (self=0x6a5938, _cmd=0x117a98, 
aSel=0x13a248, argFrame=0xbfffe990) at NSObject.m:940
#5  0x001171c4 in _objc_msgForward ()
#6  0x0058d530 in +[NSAutoreleasePool initialize] (self=0x6a5938, 
_cmd=0x1179fc) at NSAutoreleasePool.m:134
#7  0x0010ed88 in class_initialize (cls=0x6a5938) at 
runtime/objc-class.m:2071
#8  0x0010efc0 in _class_lookupMethodAndLoadCache (cls=0x6a7e28, 
sel=0x1179f0) at runtime/objc-class.m:2144
#9  0x00116bbc in objc_msgSend ()
#10 0x005ea208 in NSLogv (format=0x6a1a94, args=0xbfffecdc "\000"...) at 
NSLog.m:124
#11 0x005ea208 in NSLogv (format=Cannot access memory at address 
0xc24bc23d
) at NSLog.m:124
#12 0x005ea1b4 in NSLog (format=0x6a1a94) at NSLog.m:116
#13 0x005fd8c0 in GSLogZombie (o=0x6a63b8, sel=0x1179fc) at NSObject.m:120
#14 0x00600f6c in -[NSZombie forward::] (self=0x6a63b8, _cmd=0x117a98, 
aSel=0x1179fc, argFrame=0xbfffed98) at NSObject.m:1655
#15 0x001171c4 in _objc_msgForward ()
#16 0x0010ed88 in class_initialize (cls=0x6a63b8) at 
runtime/objc-class.m:2071
#17 0x0010efc0 in _class_lookupMethodAndLoadCache (cls=0x6a88a8, 
sel=0x1179c8) at runtime/objc-class.m:2144
#18 0x00116bbc in objc_msgSend ()
#19 0x005fdfd4 in +[NSObject initialize] (self=0x6a6418, _cmd=0x1179fc) at 
NSObject.m:724
#20 0x005fdfd4 in +[NSObject initialize] (self=Cannot access memory at 
address 0xc24bc21d
) at NSObject.m:724
#21 0x0010ed88 in class_initialize (cls=0x6a6418) at 
runtime/objc-class.m:2071
#22 0x0010ecac in class_initialize (cls=0x6a5938) at 
runtime/objc-class.m:2045
#23 0x0010efc0 in _class_lookupMethodAndLoadCache (cls=0x6a7e28, 
sel=0x1179f0) at runtime/objc-class.m:2144
#24 0x00116bbc in objc_msgSend ()
#25 0x00613c40 in _gnu_process_args (argc=1, argv=0xbffff3bc, 
env=0xbffff3c4) at NSProcessInfo.m:171
#26 0x00613c40 in _gnu_process_args (argc=Cannot access memory at address 
0xc24bc26d
) at NSProcessInfo.m:171
#27 0x00614200 in main (argc=1, argv=0xbffff3bc, env=0xbffff3c4) at 
NSProcessInfo.m:536
#28 0x000028f0 in _start ()
#29 0x00002720 in start ()
(gdb)

This backtrace shows also the infinite loop in [NSObject forward::] in 
correlation with NSInvocation for which I don't have any solution.

If you need additonal information, please drop me a line.

greetings, Lars



reply via email to

[Prev in Thread] Current Thread [Next in Thread]