Debugging Walkthrough

Is there a debugging walkthrough anywhere? I’ve done everything I can to clean up my game but I’m getting memory leaks that cause it to crash from a low memory warning after playing through about 15 levels.

I’ve run it through Leaks in Instruments and, although I have no idea what I’m looking at there, the majority of the leaks seem to come from the UIKit with something to do with whatever a “malloc libSystem.B.dyLib” is. Any ideas? Or is there some better way to do this whole debugging process? [import]uid: 14032 topic_id: 9743 reply_id: 309743[/import]

I think this is a good example of the source of my memory leak problem in my game. If anybody sees any trouble makers here, let me know.

Right now, I’m using this at the beginning of all my pages:

[code]
local function garbagePrinting()
collectgarbage(“collect”)
print(“loadmainmenu.lua”)
print("Memory: " … collectgarbage(“count”))
print(system.getInfo(“textureMemoryUsed”))
end

garbagePrinting()[/code]

And then when I switch pages:

local goToLevel = function() audio.stop( 11 ) audio.dispose( 11 ) brainSound = nil reacher1:dispose() reacher1 = nil walker:dispose() walker = nil reacher2:dispose() reacher2 = nil cleanGroup( localGroup ) localGroup = nil director:changeScene( "mainmenu" ) end

Here’s that whole page. It’s causing the garbage count to go up 59 (K?) and I think is a good example of the same problem I’m having throughout the game:

[code]
module(…, package.seeall)

– Main function - MUST return a display.newGroup()
function new()

local sprite = require “sprite”

local function garbagePrinting()
collectgarbage(“collect”)
print(“loadmainmenu.lua”)
print("Memory: " … collectgarbage(“count”))
print(system.getInfo(“textureMemoryUsed”))
end

garbagePrinting()

local localGroup = display.newGroup()

local theTimer
local backgroundFill
local spriteReacher1
local spriteWalker
local spriteReacher2
local loadingImage

local brainSound = audio.loadSound( “brains07.mp3” , false)
audio.play( brainSound, { channel=11, onComplete=audio.stop( 11 ) } )

local showLoadingScreen = function()

backgroundFill = display.newImageRect( “scrollmore-bg.png”, 480, 320 )
backgroundFill.x = centerX; backgroundFill.y = centerY
localGroup:insert( backgroundFill )

local reacher1 = sprite.newSpriteSheetFromData( “reacher1”…suffix…".png", require(“reacher1”…suffix).getSpriteSheetData() )
local spriteSet = sprite.newSpriteSet( reacher1,1,59 )
sprite.add(spriteSet,“reacher1”,1,59,1000,0)

spriteReacher1 = sprite.newSprite( spriteSet )

spriteReacher1:prepare()
spriteReacher1:play()
spriteReacher1.x = 100
spriteReacher1.y = 296
spriteReacher1.xScale, spriteReacher1.yScale = displayScale, displayScale

localGroup:insert( spriteReacher1 )

local walker = sprite.newSpriteSheetFromData( “walker”…suffix…".png", require(“walker”…suffix).getSpriteSheetData() )
local spriteSet = sprite.newSpriteSet( walker,1,59 )
sprite.add(spriteSet,“walker”,1,59,1000,0)

spriteWalker = sprite.newSprite( spriteSet )

spriteWalker:play()
spriteWalker.x = 240
spriteWalker.y = 55
spriteWalker.xScale, spriteWalker.yScale = displayScale, displayScale

localGroup:insert( spriteWalker )

local reacher2 = sprite.newSpriteSheetFromData( “reacher2”…suffix…".png", require(“reacher2”…suffix).getSpriteSheetData() )
local spriteSet = sprite.newSpriteSet( reacher2,1,59 )
sprite.add(spriteSet,“reacher2”,1,59,1000,0)

spriteReacher2 = sprite.newSprite( spriteSet )

spriteReacher2:play()
spriteReacher2.x = 380
spriteReacher2.y = 296
spriteReacher2.xScale, spriteReacher2.yScale = displayScale, displayScale

localGroup:insert( spriteReacher2 )

loadingImage = display.newImageRect( “ratatat.png”, 480, 320 )
loadingImage.x = centerX; loadingImage.y = centerY
localGroup:insert( loadingImage )

local goToLevel = function()
audio.stop( 11 )
audio.dispose( 11 )
brainSound = nil
reacher1:dispose()
reacher1 = nil
walker:dispose()
walker = nil
reacher2:dispose()
reacher2 = nil
cleanGroup( localGroup )
localGroup = nil
director:changeScene( “mainmenu” )
end

theTimer = timer.performWithDelay( 3000, goToLevel, 1 )
end

r = display.newRect( screenX, screenY, screenWidth, screenHeight)
r:setFillColor( 0, 0, 0 )

local function repeatFade (event)
r.alpha = 1
transition.to( r, { alpha=0, time=700 } )
end

– Fade out rectangle every second 20x using transition.to()
timer.performWithDelay( 700, repeatFade, 1 )

showLoadingScreen()

unloadMe = function()
if theTimer then
timer.cancel( theTimer )
theTimer = nil
end

end

– MUST return a display.newGroup()
return localGroup
end[/code] [import]uid: 14032 topic_id: 9743 reply_id: 35641[/import]