I have developed application for ipad, already developed for iphone and works great but when moving to ipad I merged the pages together so the page has more than one table and too many objects
when open the main page it works sometimes but when I go to another page and try to go back to the main page the app crashes and gives this
libobjc.A.dylib`objc_autorelease:
0x3b61d660: cbz r0, 0x3b61d67a ; objc_autorelease + 26
0x3b61d662: ldr r1, [r0]
0x3b61d664: movs r2, #2
0x3b61d666: ldr r1, [r1, #16]
0x3b61d668: bfi r1, r2, #0, #2
0x3b61d66c: ldrb r1, [r1]
0x3b61d66e: tst.w r1, #2
0x3b61d672: bne 0x3b61d67e ; objc_autorelease + 30
0x3b61d674: movs r1, #0
0x3b61d676: b.w 0x3b61e230 ; -[NSObject autorelease]
0x3b61d67a: movs r0, #0
0x3b61d67c: bx lr
0x3b61d67e: movw r1, #5170
0x3b61d682: movt r1, #503
0x3b61d686: add r1, pc
0x3b61d688: ldr r1, [r1]
0x3b61d68a: b.w 0x3b60d5c0 ; objc_msgSend
0x3b61d68e: nop
I have read many articles some of them said that it releasing objects already released and some of them is not helping at all telling that I should look for allocating but I don't know how to use it, tried but nothing works.
So please any one can help me with this issue?
Overreleased objects are called zombies. If you look around on the net, you can find some help on how to use the profiler (Apple Instruments) to track them down.
Here are a couple of Apple links about zombie hunting.
Finding Messages Sent To Deallocated Objects
Eradicating Zombies with the Zombies Trace Template
Related
I'm trying to trigger a DMA channel to perform a memory-to-memory transfer within the SRAM. The channel throws up the busy flag, but there is no change to the transfer count.
I have the following code:
;reset dma
ldr r0, *resets_clr ;clear reset
mov r1, 4
str r1, (r0, 0)
ldr r0, *resets_rw ;confirm reset clear
*rst_dma
ldr r2, (r0, 2)
and r2, r1
beq *rst_dma
;start dma channel
ldr r0, *dma_rw
adr r1, *var
str r1, (r0, 0) ;read addr
ldr r1, *sram_addr
str r1, (r0, 1) ;write addr
mov r1, 8
str r1, (r0, 2) ;trans count
mov r1, 47 ;incr_write | size_word | high_priority | en
str r1, (r0, 3) ;ctrl trig
;wait for transfer marked complete
mov r2, 1
lsl r2, r2, 24
*busy_dma
ldr r1, (r0, 3)
and r1, r2
bne *busy_dma
;test
ldr r0, *sram_addr
ldr r1, (r0, 0)
mov lr, pc
cmp r1, 7
beq *led_on
With the following word-sized values:
resets_rw 0x4000c000
resets_clr 0x4000f000
var 7
dma_rw 0x50000000
sram_addr 0x20001000
The chip hangs up in the rst_dma loop, which waits until the channel drops its busy flag. If I run without the loop, the memory test fails. The channel throws no AHB error.
I already typed the question out so might as well answer it.
The channel control register has a field to select a transfer request signal (TREQ_SEL), which resets to the first data request channel, DREQ_PIO0_TX0. If you're not using the DMA with a peripheral, and don't care about timing the transfer pace, you should set the field to 0x3f for unpaced transfers.
mov r1, 63 ;treq_sel unpaced transfer
lsl r1, r1, 15
add r1, 47 ;inc_write | size_word | en
str r1, (r0, 3) ;ctrl trig
Without this, the DMA will just sit there, waiting for a non-existent signal.
Using dispatch manager in my iOS app for 2 years now. Ever since iOS 7 strange crashes are happening when using it the same way. I have a switch what updates a value in the database (CoreData) and when done i do a reload. Sometimes when switching the control to on or off the app crashes on block invoke of the refresh system. But only since iOS 7..
What can i do about this?
Error:
libdispatch.dylib`_dispatch_call_block_and_release:
0x3b231d70: push {r4, r7, lr}
0x3b231d72: mov r4, r0
0x3b231d74: add r7, sp, #4
0x3b231d76: ldr r1, [r4, #12]
0x3b231d78: blx r1
0x3b231d7a: mov r0, r4
0x3b231d7c: pop.w {r4, r7, lr}
0x3b231d80: b.w 0x3b2508a0 ; _Block_release$shim
I wrote this arm assembler code calling pthread to implement multi-threading features. I wrote two similar files, but this one is quite tricky.
The main function is:
main:
stmfd sp!, {fp,lr}
add fp, sp, #4
sub sp, sp, #8
sub r3, sp, #8
mov r0, r3
mov r1, #0
ldr r2, .l_thrd1
mov r3, #0
bl pthread_create
ldr r3, [fp, #-8]
mov r0, r3
mov r1, #0
bl pthread_join
...
use objdump to see the related disassembled code:
00405468 <pthread_join>:
405468: e5903068 ldr r3, [r0, #104] ; 0x68
40546c: e92d45f0 push {r4, r5, r6, r7, r8, sl, lr}
405470: e3530000 cmp r3, #0
405474: e24dd014 sub sp, sp, #20
405478: e1a05000 mov r5, r0
40547c: e1a06001 mov r6, r1
405480: ba00004a blt 4055b0 <pthread_join+0x148>
405484: e590321c ldr r3, [r0, #540] ; 0x21c
....
It looks normal, unless it caused the segment error. The qemu.log looks messy and crappy around this:
----------------
IN: pthread_join
INST: isa=[0] opk=[JMP_OP] src={-,-,-,-} dst={-,-} shift={-,-,-} c=[1] s=[-] imm=[24,74] rotate_reg=[-] vfp={-,-,-,-} vfp_val={-,-,-,-} ###
0x00405468: e5903068 ### ldr r3, [r0, #104]
0x0040546c: e92d45f0 ### push {r4, r5, r6, r7, r8, sl, lr}
0x00405470: e3530000 ### cmp r3, #0 ; 0x0
0x00405474: e24dd014 ### sub sp, sp, #20 ; 0x14
0x00405478: e1a05000 ### mov r5, r0
0x0040547c: e1a06001 ### mov r6, r1
0x00405480: ba00004a ### b.lt 0x4055b0
----------------
IN: pthread_join
INST: isa=[0] opk=[JMP_OP] src={-,-,-,-} dst={-,-} shift={-,-,-} c=[1] s=[-] imm=[24,74] rotate_reg=[-] vfp={-,-,-,-} vfp_val={-,-,-,-} ###
0x00405468: e5903068 ### ldr r3, [r0, #104]
0x0040546c: e92d45f0 ### push----------------
IN: start_thread
INST: isa=[0] opk=[JMP_OP] src={-,-,-,-} dst={-,-} shift={-,-,-} c=[0] s=[-] imm=[24,4148] rotate_reg=[-] vfp={-,-,-,-} vfp_val={-,-,-,-} ###
0x00404274: e7802003 ### str{r4, r5 , r6, r7r2, ,r8, sl[r0, , lrr3}]
0x00405470: e3530000 ###
....
Obviously, pthread_join has been entered twice. And at the second time, the 'push' instruction seems not to have been fully executed. The registers also seem normal. I just do not get it.
Another code runs in the right order. They almost same coded.
Nobody's got an answer for the question. I got to answer it myself.
The problem was caused by because stack pointer (r13) was unintentionally saved on the memory and changed by another thread. So r13 pointed to another memory address and caused the segment error.
I'm trying to determine what's causing a crash I'm seeing while testing my app. It now throws EXEC_BAD_ACCESS (code=1, address=0x1) each time I try to run the app from xcode with the iphone connected.
The app crashes but I don't see a new entry in the crash log.I've tried running with Zombies enabled but I get the same crash.
Weird thing is if I debug with the simulator, run the app on the device by tapping its icon, or even in Instruments, I don't get this error. Any suggestion and/or explanation would be very much appreciated.
Here's what I see in Xcode:
libobjc.A.dylib`objc_msgSend:
0x36acb5c0: teq.w r0, #0
0x36acb5c4: beq 0x36acb606 ; objc_msgSend + 70
0x36acb5c6: push.w {r3, r4}
**0x36acb5ca: ldr r4, [r0]** < ------ This is where the app gets caught up EXEC_BAD_ACCESS (code=1, address=0x1)
0x36acb5cc: lsr.w r9, r1, #2
0x36acb5d0: ldr r3, [r4, #8]
0x36acb5d2: add.w r3, r3, #8
0x36acb5d6: ldr r12, [r3, #-8]
0x36acb5da: and.w r9, r9, r12
0x36acb5de: ldr.w r4, [r3, r9, lsl #2]
0x36acb5e2: teq.w r4, #0
0x36acb5e6: add.w r9, r9, #1
0x36acb5ea: beq 0x36acb600 ; objc_msgSend + 64
0x36acb5ec: ldr.w r12, [r4]
0x36acb5f0: teq.w r1, r12
0x36acb5f4: bne 0x36acb5d6 ; objc_msgSend + 22
0x36acb5f6: ldr.w r12, [r4, #8]
0x36acb5fa: pop.w {r3, r4}
0x36acb5fe: bx r12
0x36acb600: pop.w {r3, r4}
0x36acb604: b 0x36acb620 ; objc_msgSend_uncached
0x36acb606: mov.w r1, #0
0x36acb60a: bx lr
0x36acb60c: nop
0x36acb60e: nop
0x36acb610: nop
0x36acb612: nop
0x36acb614: nop
0x36acb616: nop
0x36acb618: nop
0x36acb61a: nop
0x36acb61c: nop
0x36acb61e: nop
Try to enable all memory debugging options in cmd-alt-b menu: zombies, scribble, etc. And set exception breakpoint.
When in doubt, reboot your device. Works fine now. Could not isolate what was causing the error.
I have a app, when I had run it for a few minutes, it always crashed. I check the crash log, it always said
malloc: * mmap(size=1048576) failed (error code=12)
* error: can't allocate region securely
I checked the memory leaks by using the instruments tools, but did not find any memory leak. I wonder if there are some memory leaks the instruments can not find, or some other reasons for the crash.
any help will be appreciated!
Edit:
I used the time profiler to check the performance. but I don't know what's the key point because the top items are these:
Running Time Self Symbol Name
6494.0ms 9.4% 6494.0 -[DLStarView initWithDefault:highlighted:position:allowFractions:]
(my app has a lot of list, each item has a self made star view)
Running Time Self Symbol Name
5848.0ms 8.4% 5848.0 +[ASIHTTPRequest runRequests]
(my app always get data from sever)
Running Time Self Symbol Name
2169.0ms 3.1% 2169.0 -[BMKUserLocationInternal updateLocationInfo]
Running Time Self Symbol Name
1435.0ms 2.0% 1435.0 -[EGOCache imageForKey:]
Running Time Self Symbol Name
1252.0ms 1.8% 1252.0 -[KLRestDetailViewController tableView:cellForRowAtIndexPath:]
is it userful? how can I check if I stuffing a bunch of stuff?
PS: this crash only appear on the real device, I ran it in the simulator for about 20 minutes and the app still run smoothly, my device is iPhone4S iOS 6.0.1
I set a break point and got the messages:
the crash thread messages are not always the same
but in the console output, It always said
malloc: * mmap(size=1048576) failed (error code=12)
error: can't allocate region securely
** set a breakpoint in malloc_error_break to debug
I was so confused by this bug for a few days, any idea? thanks!
I used the time profiler to check the performance. but I don't know what's the key point because the top items are these:
Running Time Self Symbol Name
6494.0ms 9.4% 6494.0 -[DLStarView initWithDefault:highlighted:position:allowFractions:]
(my app has a lot of list, each item has a self made star view)
Running Time Self Symbol Name
5848.0ms 8.4% 5848.0 +[ASIHTTPRequest runRequests]
(my app always get data from sever)
Running Time Self Symbol Name
2169.0ms 3.1% 2169.0 -[BMKUserLocationInternal updateLocationInfo]
Running Time Self Symbol Name
1435.0ms 2.0% 1435.0 -[EGOCache imageForKey:]
Running Time Self Symbol Name
1252.0ms 1.8% 1252.0 -[KLRestDetailViewController tableView:cellForRowAtIndexPath:]
is it userful? how can I check if I stuffing a bunch of stuff?
PS: this crash only appear on the real device, I ran it in the simulator for about 20 minutes and the app still run smoothly, my device is iPhone4S iOS 6.0.1
I set a break point and got the messages:
libsystem_c.dylib`malloc_error_break:
0x33c742e8: push {r7, lr}
0x33c742ea: mov r7, sp
0x33c742ec: nop
0x33c742ee: nop
0x33c742f0: pop {r7, pc}
0x33c742f2: nop
0x3393ed86: movs r2, #0
0x3393ed88: ldr r0, [r0]
0x3393ed8a: ldr r0, [r4, r0]
0x3393ed8c: blx 0x33aaf1c0; symbol stub for: -[NSUUID copyWithZone:]
0x3393ed90: movw r0, #52700
0x3393ed94: movt r0, #1571
0x3393ed98: add r0, pc
0x3393ed9a: ldr r1, [r0]
0x23ac72: mov r0, r5
0x23ac74: str.w r8, [sp]
0x23ac78: blx 0x2c7d04 ; symbol stub for: objc_msgSend
0x23ac7c: b 0x23aca4 ; -[BMKUserLocationInternal updateLocationInfo] + 912 at BMKUserLocationInternal.mm:131
0x23ac7e: bl 0x1cbcd8 ; bmengine::GetGlobalMan() at IphoneBaiduMaps.mm:61
0x33941b7e: mov r0, r11
0x33941b80: mov r1, r8
0x33941b82: mov r2, r10
0x33941b84: blx 0x33aace80 ; symbol stub for: CFDictionarySetValue$shim
0x33941b88: movw r0, #36884
0x33941b8c: movt r0, #1571
0x33941b90: add r0, pc
0x33941b92: ldr r4, [r0]
0x33941b94: mov r0, r11
0x23acd6: movs r3, #1
0x23acd8: str r3, [sp]
0x23acda: movs r3, #0
0x23acdc: blx 0x2c7d04 ; symbol stub for: objc_msgSend
0x23ace0: add sp, #4
0x23ace2: pop {r7, pc}
0x35bee92e: ldr r1, [sp, #224]
0x35bee930: ldr r2, [sp, #136]
0x35bee932: ldr r3, [sp, #232]
0x35bee934: blx 0x35c268e4 ; symbol stub for: CLLocationDictionaryUtilitiesGetTransitionInterval
0x35bee938: movw r0, #1732
0x35bee93c: movt r0, #1078
0x35bee940: add r0, pc
0x35bee942: ldr r1, [r0]
the crash thread messages are not always the same
but in the console output, It always said
malloc: * mmap(size=1048576) failed (error code=12)
error: can't allocate region securely
** set a breakpoint in malloc_error_break to debug
I was so confused by this bug for a few days, any idea? thanks!