Crashing app when device not connected to Xcode

3

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

iphone
crash
asked on Stack Overflow Sep 28, 2009 by (unknown user)

2 Answers

10

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.

answered on Stack Overflow Dec 30, 2009 by seppo0010
6

Just to generalize @seppo0010's answer and update it for 2011:


First off, in Xcode4, Device Logs (found in the Organizer window) will show you the thread, file, and line number of the crash, so atos may not even be necessary. The crashes can be sorted by Application, Type, and Date/Time. A typical crash would include something like the following:

Thread 1 name:  Dispatch queue: someQueue
Thread 1 Crashed:
0   MyApp   0x00003e14 -[MyAppViewController someMethod:withParam1:andParam2:] (MyAppViewController.m:254)


But if you do decide to use atos, note the following:

  • 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.)

answered on Stack Overflow Aug 15, 2011 by Old McStopher

User contributions licensed under CC BY-SA 3.0