2012-11-28 92 views
0

我使用儀器工具(泄漏)來診斷泄漏,但我不太明白我如何可以回溯到我的代碼。有誰知道我該如何進一步診斷?xCode&iOS:調試與泄漏

使用Xcode 4.5 &在iPad(iOS 4.3.5)上進行性能分析。

UPDATE:這裏是回溯:

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:與擴展的詳細儀器。仍然沒有指向源。它指向機器代碼。

with Extended Detail

回答

1

如果您打開擴展詳細視圖,你應該能夠看到調用堆棧當您選擇從細節視圖泄漏。另外,切換到調用樹視圖可以幫助您確定代碼中發生泄漏的位置。使用跳轉欄切換到呼叫樹視圖。

當您切換到調用樹視圖時,您應該在調用樹的左側看到一系列複選框。選擇「反向調用樹」和「隱藏系統庫」複選框可以讓您在調用樹中查找代碼。雙擊調用樹中的一個函數將顯示分配泄漏內存的代碼行。

+0

謝謝。按照您的指示完成,但仍然沒有指示我採取正確的方式。更新了問題。 – Raptor

+0

截圖中的擴展細節視圖顯示了調用堆棧中的源代碼。如果它只是顯示機器碼,你會得到調用堆棧中的內存地址而不是函數名稱。調用樹視圖更適合查找您的代碼。如果調用樹視圖顯示內存地址而不是函數名稱,請確保您的項目正在生成調試符號。 –