Raptor
Raptor

Reputation: 54212

xCode & iOS : Debugging with Leaks

I am using Instruments Tool ( Leaks ) to diagnose the leaks, but I don't quite understand how I can backtrack to my codes. Does anyone know how can I further diagnose ?

Using Xcode 4.5 & Profiling on iPad (iOS 4.3.5).

UPDATE: Here is the backtrace :

thread #4: tid = 0x3203, 0x35dffd7a libicucore.A.dylib`utext_hasMetaData + 546, stop reason = EXC_BAD_ACCESS (code=2, address=0x0)
    frame #0: 0x35dffd7a libicucore.A.dylib`utext_hasMetaData + 546
    frame #1: 0x003c17d0
    frame #2: 0x35da6746 libicucore.A.dylib`icu::RuleBasedBreakIterator::handleNext(icu::RBBIStateTable const*) + 806
    frame #3: 0x35da6406 libicucore.A.dylib`icu::RuleBasedBreakIterator::next() + 82
    frame #4: 0x35da5cde libicucore.A.dylib`icu::RuleBasedBreakIterator::following(int) + 218
    frame #5: 0x35db0538 libicucore.A.dylib`ubrk_following + 8
    frame #6: 0x32bb0bc8 WebCore`WebCore::textBreakFollowing(WebCore::TextBreakIterator*, int) + 8
    frame #7: 0x32b9baee WebCore`WebCore::nextBreakablePosition(unsigned short const*, int, int, bool) + 270
    frame #8: 0x32bd0dc8 WebCore`WebCore::RenderBlock::findNextLineBreak(WebCore::BidiResolver<WebCore::InlineIterator, WebCore::BidiRun>&, bool, bool&, bool&, bool&, WebCore::EClear*) + 6920
    frame #9: 0x32b8ce02 WebCore`WebCore::RenderBlock::layoutInlineChildren(bool, int&, int&) + 1922
    frame #10: 0x32b8a1ae WebCore`WebCore::RenderBlock::layoutBlock(bool) + 690
    frame #11: 0x32b897c2 WebCore`WebCore::RenderBlock::layout() + 26
    frame #12: 0x32b8b956 WebCore`WebCore::RenderBlock::layoutBlockChild(WebCore::RenderBox*, WebCore::RenderBlock::MarginInfo&, int&, int&) + 414
    frame #13: 0x32b8b24c WebCore`WebCore::RenderBlock::layoutBlockChildren(bool, int&) + 428
    frame #14: 0x32b8a1bc WebCore`WebCore::RenderBlock::layoutBlock(bool) + 704
    frame #15: 0x32b897c2 WebCore`WebCore::RenderBlock::layout() + 26
    frame #16: 0x32b8b956 WebCore`WebCore::RenderBlock::layoutBlockChild(WebCore::RenderBox*, WebCore::RenderBlock::MarginInfo&, int&, int&) + 414
    frame #17: 0x32b8b24c WebCore`WebCore::RenderBlock::layoutBlockChildren(bool, int&) + 428
    frame #18: 0x32b8a1bc WebCore`WebCore::RenderBlock::layoutBlock(bool) + 704
    frame #19: 0x32b897c2 WebCore`WebCore::RenderBlock::layout() + 26
    frame #20: 0x32b8b956 WebCore`WebCore::RenderBlock::layoutBlockChild(WebCore::RenderBox*, WebCore::RenderBlock::MarginInfo&, int&, int&) + 414
    frame #21: 0x32b8b24c WebCore`WebCore::RenderBlock::layoutBlockChildren(bool, int&) + 428
    frame #22: 0x32b8a1bc WebCore`WebCore::RenderBlock::layoutBlock(bool) + 704
    frame #23: 0x32b897c2 WebCore`WebCore::RenderBlock::layout() + 26
    frame #24: 0x32b8b956 WebCore`WebCore::RenderBlock::layoutBlockChild(WebCore::RenderBox*, WebCore::RenderBlock::MarginInfo&, int&, int&) + 414
    frame #25: 0x32b8b24c WebCore`WebCore::RenderBlock::layoutBlockChildren(bool, int&) + 428
    frame #26: 0x32b8a1bc WebCore`WebCore::RenderBlock::layoutBlock(bool) + 704
    frame #27: 0x32b897c2 WebCore`WebCore::RenderBlock::layout() + 26
    frame #28: 0x32b8974e WebCore`WebCore::RenderView::layout() + 334
    frame #29: 0x32b85cba WebCore`WebCore::FrameView::layout(bool) + 1486
    frame #30: 0x32b82c12 WebCore`WebCore::Document::implicitClose() + 794
    frame #31: 0x32b828f6 WebCore`WebCore::FrameLoader::checkCallImplicitClose() + 86
    frame #32: 0x32b827fe WebCore`WebCore::FrameLoader::checkCompleted() + 134
    frame #33: 0x32b82380 WebCore`WebCore::FrameLoader::finishedParsing() + 64

Screenshot of Leaks

UPDATE : Instruments with Extended Detail. Still not pointing to source. It points to machine code instead.

with Extended Detail

Upvotes: 0

Views: 372

Answers (1)

Swift Dev Journal
Swift Dev Journal

Reputation: 20088

If you open the extended detail view, you should be able to see the call stack when you select a leak from the detail view. In addition, switching to the call tree view can help you determine where the leaks are occurring in your code. Use the jump bar to switch to the call tree view.

When you switch to the call tree view, you should see a series of checkboxes to the left of the call tree. Selecting the Invert Call Tree and Hide System Libraries checkboxes allow you to find your code in the call tree. Double-clicking one of your functions in the call tree will show you the lines of code that allocate leaked memory.

Upvotes: 1

Related Questions