我的应用程序是用目标 c 和 c++ 编写的。我正在使用 xcode 4.5,当然我有开发者帐户,我的设备没有越狱,我已经在我的开发者帐户中设置了所有内容。我不使用 xcode 中的“设备日志”,而是实现了信号/异常处理程序来将堆栈跟踪写入文件,并且 - 当下次应用程序启动时 - 将其发送到我的网络服务器。
为了获得崩溃时的堆栈跟踪,我使用 [NSException callStackSymbols]。有用。因此,当我进行示例崩溃时,例如:
NSArray *arr=[NSArray array];
[arr objectAtIndex:100];
在 xcode 中调试并从设备上的 xcode 应用程序安装启动时,我得到:
0 CoreFoundation 0x36c738a7 __exceptionPreprocess + 186
1 libobjc.A.dylib 0x3308a259 objc_exception_throw + 32
2 CoreFoundation 0x36bcb23d -[__NSArrayI objectAtIndex:] + 164
3 MyApp 0x001be505 _ZN8Menu6handleEN12GestureE + 912
4 MyApp 0x000e6ce1 _ZN13BaseLevel10handleBaseEN12GestureE + 440
5 MyApp 0x0011b747 _ZN12Manager6handleEN12GestureE + 742
6 MyApp 0x00102731 _ZN13Processor9doProcessEd + 552
7 GLKit 0x3723a0c5 -[GLKViewController _updateAndDraw] + 272
8 CoreFoundation 0x36bd27d3 -[NSObject performSelector:] + 38
9 QuartzCore 0x3233486f _ZN2CA7Display11DisplayLink8dispatchEyy + 166
10 QuartzCore 0x323347c5 _ZN2CA7Display16IOMFBDisplayLink8callbackEP21__IOMobileFramebufferyyyPv + 60
MyApp c++ 和 objc 类和方法都可以符号化。
但是当我制作 AdHoc ipa 并在其中做同样的事情时,我得到:
0 CoreFoundation 0x36c738a7 __exceptionPreprocess + 186
1 libobjc.A.dylib 0x3308a259 objc_exception_throw + 32
2 CoreFoundation 0x36bcb23d -[__NSArrayI objectAtIndex:] + 164
3 MyApp 0x001be505 _mh_execute_header + 894213
4 MyApp 0x000e6ce1 _mh_execute_header + 11489
5 MyApp 0x0011b747 _mh_execute_header + 227143
6 MyApp 0x00102731 _mh_execute_header + 124721
7 GLKit 0x3723a0c5 -[GLKViewController _updateAndDraw] + 272
8 CoreFoundation 0x36bd27d3 -[NSObject performSelector:] + 38
9 QuartzCore 0x3233486f _ZN2CA7Display11DisplayLink8dispatchEyy + 166
10 QuartzCore 0x323347c5 _ZN2CA7Display16IOMFBDisplayLink8callbackEP21__IOMobileFramebufferyyyPv + 60]
即我的类和方法的名称消失了,由符号_mh_execute_header+<offset> 代替。
我以为我错过了 dSYM 设置,但它在发布和调试时都打开了,“剥离调试符号”也关闭了。
已经搜索过SO,但没有运气。请告诉我怎么了?