Difficulties with MallocDebug
Christopher Henrich <chenrich-I/mPKdbEGRBWk0Htik3J/[email protected]> Sat, 08 Jan 2011 23:43:09 -0500
| Newsgroups | gmane.comp.macosx.devel |
|---|---|
| Message-ID | <[email protected]> |
I am having trouble using MallocDebug to look for memory leaks in a program that I am developing.
The program mixes Cocoa and Objective-C with C++. The relevant part of it implements a gnarly algorithm to count certain subsets of a graph. When the graph gets large, the algorithm seems to use an awful lot of heap space. I suspect that I have a memory leak. But "suspect" isn't "know," and I would like to get some data about heap usage.
MallocDebug would appear to be my friend. The Mac OS X 10.6 documentation ("Memory Usage Performance Guidelines") tells me how I can use it to examine heap allocation and sniff out leaks.
But I can't. When I try to launch my program from MallocDebug, my program instantly crashes. Then MallocDebug crashes too.
The crash is bad enough that windows pop up, promising to send the details of the crash to Apple. At the same time, MallocDebug posts a message box of its own, stating that it is "Unable to read malloc information from (null)".
Whatever it is that hits the fan, it does so in the execution of standard setup code of the user interface. Evidence for this claim is found in the following text that is supposedly(*) being sent to Apple.
Process: StarMaker [13286]
Path: /Users/chris/Documents/Workspace/New StarMaker/build/Release/StarMaker.app/Contents/MacOS/StarMaker
Identifier: com.mathinteract.StarMaker
Version: ??? (1.0)
Code Type: X86 (Native)
Parent Process: MallocDebug [13277]
Date/Time: 2011-01-08 23:06:52.660 -0500
OS Version: Mac OS X 10.6.5 (10H574)
Report Version: 6
Interval Since Last Report: 108452 sec
Crashes Since Last Report: 8 <<<<------------------ This makes me paranoid
Per-App Interval Since Last Report: 37439 sec
Per-App Crashes Since Last Report: 4
Anonymous UUID: E3F85D4F-BE81-4201-B8D6-A626804D10D0
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000000000000
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 com.apple.CoreFoundation 0x95520293 CFQSortArray + 259
1 com.apple.CoreFoundation 0x95501019 CFArraySortValues + 489
2 com.apple.ColorSync 0x95634bc0 ColorSyncProfileCopyTagSignatures + 175
3 com.apple.ColorSync 0x95661218 CMMProfile::Usable() + 62
4 com.apple.ColorSync 0x95660b5d DoValidateProfile + 74
5 com.apple.ColorSync 0x95660c75 AppleCMMValidateProfile + 28
6 com.apple.ColorSync 0x95635e52 ColorSyncProfileVerify + 31
7 libCSync.A.dylib 0x90868c80 validateProfile + 65
8 libCSync.A.dylib 0x90868be5 CMSValidateProfile + 60
9 com.apple.CoreGraphics 0x94c39c4c CGCMSInterfaceValidateProfile + 27
10 com.apple.CoreGraphics 0x94c39c2c CGCMSUtilsValidateProfile + 24
11 com.apple.CoreGraphics 0x94c39b2b CGColorSpaceCreateICCBased + 136
12 com.apple.CoreGraphics 0x94c38ee3 create_generic_color_space + 127
13 com.apple.CoreGraphics 0x94c38c72 CGColorSpaceCreateWithIndex + 298
14 com.apple.AppKit 0x95b457c1 +[NSColorSpace specialColorSpaceWithID:] + 193
15 com.apple.AppKit 0x95b456f8 +[NSColorSpace genericRGBColorSpace] + 45
16 com.apple.AppKit 0x95b4550a -[NSBitmapImageRep _bitmapImageRep_setColorSpaceName:] + 55
17 com.apple.AppKit 0x95e13ccd -[NSBitmapImageRep initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bitmapFormat:bytesPerRow:bitsPerPixel:] + 513
18 com.apple.AppKit 0x95b44f9a -[NSBitmapImageRep _initWithSharedBitmap:rect:] + 302
19 com.apple.AppKit 0x95b44bea -[NSImage _addRepresentationWithSharedKitWindow:rect:] + 224
20 com.apple.AppKit 0x95b439f2 +[NSImage _findSystemImageNamed:] + 274
21 com.apple.AppKit 0x95b43734 +[NSImage imageNamed:] + 171
22 com.apple.AppKit 0x95b435d6 -[NSCustomResource _loadImageWithName:] + 58
23 com.apple.AppKit 0x95b4350a -[NSCustomResource loadImageWithName:] + 49
24 com.apple.AppKit 0x95b42a4b -[NSCustomResource awakeAfterUsingCoder:] + 365
25 com.apple.Foundation 0x936f6524 _decodeObjectBinary + 2930
26 com.apple.Foundation 0x936f5800 _decodeObject + 180
27 com.apple.AppKit 0x95b4225b -[NSMenuItem initWithCoder:] + 1546
28 com.apple.Foundation 0x936f6508 _decodeObjectBinary + 2902
29 com.apple.Foundation 0x936f5800 _decodeObject + 180
30 com.apple.AppKit 0x95b3db34 -[NSNibConnector initWithCoder:] + 440
31 com.apple.AppKit 0x95b3d96d -[NSNibOutletConnector initWithCoder:] + 384
32 com.apple.Foundation 0x936f6508 _decodeObjectBinary + 2902
33 com.apple.Foundation 0x936f7314 -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] + 1438
34 com.apple.Foundation 0x936f7981 -[NSArray(NSArray) initWithCoder:] + 586
35 com.apple.Foundation 0x936f6508 _decodeObjectBinary + 2902
36 com.apple.Foundation 0x936f5800 _decodeObject + 180
37 com.apple.AppKit 0x95b3cbca -[NSIBObjectData initWithCoder:] + 2337
38 com.apple.Foundation 0x936f6508 _decodeObjectBinary + 2902
39 com.apple.Foundation 0x936f5800 _decodeObject + 180
40 com.apple.AppKit 0x95b3c194 loadNib + 161
41 com.apple.AppKit 0x95b3b5ed +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] + 228
42 com.apple.AppKit 0x95b3b4fe +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:] + 158
43 com.apple.AppKit 0x95b3b449 +[NSBundle(NSNibLoading) loadNibNamed:owner:] + 383
44 com.apple.AppKit 0x95b3824d NSApplicationMain + 434
45 com.mathinteract.StarMaker 0x000036c9 start + 53
Thread 1:
0 libSystem.B.dylib 0x986850fa mach_msg_trap + 10
1 libSystem.B.dylib 0x98685867 mach_msg + 68
2 libMallocDebug.A.dylib 0x000e139f exceptionThread + 155
3 libSystem.B.dylib 0x986b285d _pthread_start + 345
4 libSystem.B.dylib 0x986b26e2 thread_start + 34
Have I left out something that I am supposed to do, in any program that is to be examined by MallocDebug?
(*) I am not entirely trustful of this notification mechanism. It looks so slick and convenient, but is it really? Up near the top of that report, see the line about "Crashes since the last report." I thought I had been reporting all the crashes as they happened. This mechanism is supposed to be doing that. The number of "crashes since the last report" should be 1 (or 0, maybe). Why is it 8?
From the Help button on the reporting window I find that I should enable a preference in the Console utility to have these reports sent automatically. That preference is enabled.
The smart money says that I am screwing up something. Can anybody point me towards finding out what it is? Heartfelt thanks in advance.
Christopher Henrich
chenrich-I/mPKdbEGRBWk0Htik3J/[email protected]
mathinteract.com