Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

GNUstep on Darwin/NeXT runtime: pseudo-fix for NSAutoreleasePool, infinite loop in [NSObject forward::] in correlation with NSInvocation

0 views
Skip to first unread message

Lars Sonchocky-Helldorf

unread,
Jun 3, 2002, 12:52:45 PM6/3/02
to
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

Adam Fedor

unread,
Jun 5, 2002, 10:42:05 PM6/5/02
to
Lars Sonchocky-Helldorf wrote:
> Hi,
>
> while debuging GNUstep on Darwin/NeXT runtime I found the following
> issues:
>
> 1. NSAutoreleasePool comparison in line 129 does not work.
>


It doesn't really appear to me that there is a problem with this line.
It seems more likely that memory has been corrupted somewhere and it
just manifests itself as a crash at this line or nearby (depending on
the exact sequence of events).

Perhaps compiling with the dmalloc library or similar type of library
would help.


--
Adam Fedor, Digital Optics Corp. | I'm glad I hate spinach, because
http://www.doc.com | if I didn't, I'd eat it, and you
| know how I hate the stuff.

0 new messages