On Sep 27, 2011, at 2:06 PM, Martin Wierschin wrote:
> I have a user reporting a crash whenever they try to first save a file. It is 
> reproducible for the user (though not be me) and I'm wondering how to best 
> debug this problem remotely. I've included the crash stack below (all other 
> threads are waiting/trapped).
> 
> I'm no expert on dyld, but I suspect the crash is triggered when loading up 
> some bundle code required by OSX's save panel (or perhaps some kind of 
> installed system enhancer). I've discovered the environment variable 
> DYLD_PRINT_LIBRARIES_POST_LAUNCH, which I'm hoping will help identify the 
> relevant library. However, my fear is that this debugging aid logs each 
> library's path only after each load completes successfully (ie: conceptually 
> after the crash). If so, that obviously won't help me.
> 
>> OS Version:      Mac OS X 10.6.8 (10K540)
> ...
>> Exception Type:  EXC_BAD_ACCESS (SIGBUS)
>> Exception Codes: KERN_PROTECTION_FAILURE at 0x000000000000000c
>> Crashed Thread:  0  Dispatch queue: com.apple.main-thread
>> 
>> Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
>> 0   libobjc.A.dylib                  0x942ce85b _cache_flush + 78
>> 1   libobjc.A.dylib                  0x942d17a5 flush_marked_caches + 242
>> 2   libobjc.A.dylib                  0x942cb18d _read_images + 2189
>> 3   libobjc.A.dylib                  0x942e0975 map_images_nolock + 1545
>> 4   libobjc.A.dylib                  0x942ca189 map_images + 72
>> 5   dyld                             0x8fe03f2d 
>> dyld::notifyBatchPartial(dyld_image_states, bool, char const* 
>> (*)(dyld_image_states, unsigned int, dyld_image_info const*)) + 795
>> 6   dyld                             0x8fe0dec9 
>> ImageLoader::link(ImageLoader::LinkContext const&, bool, bool, 
>> ImageLoader::RPathChain const&) + 251
>> 7   dyld                             0x8fe056af dyld::link(ImageLoader*, 
>> bool, ImageLoader::RPathChain const&) + 137
>> 8   dyld                             0x8fe0b240 dlopen + 471
>> 9   libSystem.B.dylib                0x936e02a8 dlopen + 66
>> 10  com.apple.HIToolbox              0x9489d1c2 InitShortcut + 45
>> 11  com.apple.HIToolbox              0x9489d0d1 
>> SetupMenuTracking(MenuSelectData&, unsigned char, Point, double, MenuData*, 
>> unsigned long, unsigned short, Rect const*, Rect const*, unsigned int, Rect 
>> const*, __CFString const*) + 2964
>> 12  com.apple.HIToolbox              0x9489c07d MenuSelectCore(MenuData*, 
>> Point, double, unsigned long, OpaqueMenuRef**, unsigned short*) + 227
>> 13  com.apple.HIToolbox              0x9489b8bb _HandleMenuSelection2 + 465
>> 14  com.apple.HIToolbox              0x9489b6d9 _HandleMenuSelection + 53
>> 15  com.apple.AppKit                 0x9136ff96 _NSHandleCarbonMenuEvent + 
>> 285
>> 16  com.apple.AppKit                 0x91344b46 _DPSNextEvent + 2304
>> 17  com.apple.AppKit                 0x91343dd6 -[NSApplication 
>> nextEventMatchingMask:untilDate:inMode:dequeue:] + 156
>> 18  com.apple.AppKit                 0x913061f3 -[NSApplication run] + 821
>> 19  com.apple.AppKit                 0x912fe289 NSApplicationMain + 574
>> 20  com.myAppIdentifier              0x0000330a _start + 216
>> 21  com.myAppIdentifier              0x00003231 start + 41

Crashes inside dyld or libobjc during library load often has one of two causes:
1. A library binary on disk or in the dyld shared cache is corrupted.
2. A memory error earlier in the app corrupted a data structure, and that data 
structure went unused until library load time.

This particular crash is manipulating objc's method caches, so #2 is more 
likely. If a memory smasher hits a method cache, but that class's methods 
happen not to be called, then the corruption can go unnoticed for a long time.

If the user is sufficiently sophisticated, you might be able to get them to run 
your app with Guard Malloc enabled via DYLD_INSERT_LIBRARIES. That is probably 
your best chance of catching a memory smasher.


-- 
Greg Parker     gpar...@apple.com     Runtime Wrangler


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to