I've encountered this weird behavior with my iPhone app. It runs fine on the device when being debugged with Xcode, but when it's run on the device when the device is not connected to my computer it crashes almost immediately. Needless to say, I find this a bit disconcerting since I'm not sure how to debug it.
Anyone have ideas on what's going on or how to debug this type of problem?
I looked in the crash report when I reconnect the device and get the following:
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000070
Crashed Thread: 6
Thread 6 Crashed:
0 libobjc.A.dylib 0x300102ac 0x3000c000 + 17068
1 myapp 0x000033ba 0x1000 + 9146
2 myapp 0x0000adc8 0x1000 + 40392
3 Foundation 0x30553356 0x30501000 + 336726
4 Foundation 0x305025fe 0x30501000 + 5630
5 libSystem.B.dylib 0x31d6a6ea 0x31d46000 + 149226
and the console log has the following:
Sun Sep 27 19:59:50 unknown ReportCrash[455] <Notice>: Formulating crash report for process myapp[453]
Sun Sep 27 19:59:50 unknown com.apple.launchd[1] <Warning>: (UIKitApplication:com.yourcompany.myapp[0x2fba]) Job appears to have crashed: Bus error
Sun Sep 27 19:59:50 unknown com.apple.mobile.lockdown[14] <Notice>: Could not receive size of message
Sun Sep 27 19:59:50 unknown lockdownd[14] <Error>: (0x834400) handle_connection: Could not receive internal message #2 from myapp Killing connection
Sun Sep 27 19:59:50 unknown SpringBoard[23] <Warning>: Application 'myapp' exited abnormally with signal 10: Bus error
Many thanks
You can always get to the line of your app where it crash. Open the terminal on the build folder and run this command:
atos -arch armv6 -o myapp.app/myapp 0x000033ba
and it will return the file and line where it was. It's somehow useful.
Just to generalize @seppo0010's answer and update it for 2011:
Thread 1 name: Dispatch queue: someQueue
Thread 1 Crashed:
0 MyApp 0x00003e14 -[MyAppViewController someMethod:withParam1:andParam2:] (MyAppViewController.m:254)
Be sure that you change the -arch flag to match whatever architecture your code is running on. So, for my iPhone 4, I'd enter -arch armv7
.
Xcode 4 places your build path in a different place, so be sure to check in Xcode > Prefs > Locations
. The path to your actual build may look something like this: /Users/OldMcStopher/Library/Developer/Xcode/DerivedData/MyApp-someUglyString/Build/Products/Debug-iphoneos
The -o flag is looking for the actual binary and not just the myapp.app wrapper, so once in the Debug-iphoneos folder (or wherever your debug .app build lives), set the -o flag to MyApp.app/MyApp
, like @seppo0010 properly stated.
The atos man page describes it as follows:
The atos command converts numeric addresses to their symbolic equivalents. If full debug symbol information is available, for example in a .app.dSYM sitting beside a .app, then the output of atos will include file name and source line number information.
It can be found here: http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/atos.1.html
(Or with man atos
from the terminal.)
User contributions licensed under CC BY-SA 3.0