今天想试试用dsym和crash文件跟踪crash信息,可是一直返回如下信息:

Thread  name:  Dispatch queue: com.apple.main-thread
Thread Crashed:
libsystem_kernel.dylib 0x23269c84 __pthread_kill +
libsystem_pthread.dylib 0x2330bb46 pthread_kill +
libsystem_c.dylib 0x232000c4 abort +
libc++abi.dylib 0x22d7a7dc __cxa_bad_cast +
libc++abi.dylib 0x22d936a0 default_unexpected_handler() +
libobjc.A.dylib 0x22d9f098 _objc_terminate() +
libc++abi.dylib 0x22d90e16 std::__terminate(void (*)()) +
libc++abi.dylib 0x22d905f4 __cxxabiv1::exception_cleanup_func(_Unwind_Reason_Code, _Unwind_Exception*) +
libobjc.A.dylib 0x22d9eed2 objc_exception_throw +
CoreFoundation 0x234e831e -[__NSArrayI objectAtIndex:] +
test 0x000791f2 __hidden#5_ (__hidden#43_:35)
libdispatch.dylib 0x2316fdd6 _dispatch_call_block_and_release +
libdispatch.dylib 0x231794e6 _dispatch_after_timer_callback +
libdispatch.dylib 0x2316fdc2 _dispatch_client_callout +
libdispatch.dylib 0x231826d2 _dispatch_source_latch_and_call +
libdispatch.dylib 0x23171d16 _dispatch_source_invoke +
libdispatch.dylib 0x231741fe _dispatch_main_queue_callback_4CF +
CoreFoundation 0x23594fc4 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ +
CoreFoundation 0x235934be __CFRunLoopRun +
CoreFoundation 0x234e5bb8 CFRunLoopRunSpecific +
CoreFoundation 0x234e59ac CFRunLoopRunInMode +
GraphicsServices 0x2475faf8 GSEventRunModal +
UIKit 0x277d1fb4 UIApplicationMain +
test 0x000797de main (__hidden#317_:)
libdyld.dylib 0x23198872 start +

确实是解析了不假,但是却只能得到

test                              0x000791f2 __hidden#5_ (__hidden#43_:35)
这个35是对的,的确是源文件第35行出了bug,但是,
hidden是什么东西?之后我又单独查看了这个dsym文件,内容如下:
----------------------------------------------------------------------
File: /Users/Breeze/Desktop/crash/test.app.dSYM/Contents/Resources/DWARF/test (armv7)
----------------------------------------------------------------------
.debug_info contents: 0x00000000: Compile Unit: length = 0x00000073 version = 0x0002 abbr_offset = 0x00000000 addr_size = 0x04 (next CU at 0x00000077) 0x0000000b: TAG_compile_unit [] *
AT_producer( "__hidden#30_" )
AT_language( DW_LANG_ObjC )
AT_name( "__hidden#43_" )
AT_stmt_list( 0x00000000 )
AT_comp_dir( "__hidden#41_" )
AT_APPLE_optimized( 0x01 )
AT_APPLE_major_runtime_vers( 0x02 )
AT_low_pc( 0x0000a0b0 )
AT_high_pc( 0x0000a206 ) 0x00000028: TAG_subprogram []
AT_low_pc( 0x0000a0b0 )
AT_high_pc( 0x0000a154 )
AT_name( "__hidden#45_" ) 0x00000035: TAG_subprogram []
AT_low_pc( 0x0000a154 )
AT_high_pc( 0x0000a166 )
AT_name( "__hidden#1_" ) 0x00000042: TAG_subprogram []
AT_low_pc( 0x0000a168 )
AT_high_pc( 0x0000a16e )
AT_name( "__hidden#2_" ) 0x0000004f: TAG_subprogram []
AT_low_pc( 0x0000a170 )
AT_high_pc( 0x0000a176 )
AT_name( "__hidden#3_" ) 0x0000005c: TAG_subprogram []
AT_low_pc( 0x0000a178 )
AT_high_pc( 0x0000a1a4 )
AT_name( "__hidden#44_" ) 0x00000069: TAG_subprogram []
AT_low_pc( 0x0000a1a4 )
AT_high_pc( 0x0000a206 )
AT_name( "__hidden#42_" ) 0x00000076: NULL 0x00000077: Compile Unit: length = 0x000000db version = 0x0002 abbr_offset = 0x00000000 addr_size = 0x04 (next CU at 0x00000156) 0x00000082: TAG_compile_unit [] *
AT_producer( "__hidden#30_" )
AT_language( DW_LANG_ObjC )
AT_name( "__hidden#301_" )
AT_stmt_list( 0x000000bf )
AT_comp_dir( "__hidden#41_" )
AT_APPLE_optimized( 0x01 )
AT_APPLE_major_runtime_vers( 0x02 )
AT_low_pc( 0x0000a208 )
AT_high_pc( 0x0000a796 ) 0x0000009f: TAG_subprogram []
AT_low_pc( 0x0000a208 )
AT_high_pc( 0x0000a20c )
AT_name( "__hidden#315_" ) 0x000000ac: TAG_subprogram []
AT_low_pc( 0x0000a20c )
AT_high_pc( 0x0000a20e )
AT_name( "__hidden#314_" ) 0x000000b9: TAG_subprogram []
AT_low_pc( 0x0000a210 )
AT_high_pc( 0x0000a212 )
AT_name( "__hidden#313_" ) 0x000000c6: TAG_subprogram []
AT_low_pc( 0x0000a214 )
AT_high_pc( 0x0000a216 )
AT_name( "__hidden#312_" ) 0x000000d3: TAG_subprogram []
AT_low_pc( 0x0000a218 )
AT_high_pc( 0x0000a21a )
AT_name( "__hidden#311_" ) 0x000000e0: TAG_subprogram []
AT_low_pc( 0x0000a21c )
AT_high_pc( 0x0000a22c )
AT_name( "__hidden#310_" ) 0x000000ed: TAG_subprogram []
AT_low_pc( 0x0000a22c )
AT_high_pc( 0x0000a2a2 )
AT_name( "__hidden#309_" ) 0x000000fa: TAG_subprogram []
AT_low_pc( 0x0000a2a4 )
AT_high_pc( 0x0000a372 )
AT_name( "__hidden#308_" ) 0x00000107: TAG_subprogram []
AT_low_pc( 0x0000a374 )
AT_high_pc( 0x0000a5b6 )
AT_name( "__hidden#307_" ) 0x00000114: TAG_subprogram []
AT_low_pc( 0x0000a5b8 )
AT_high_pc( 0x0000a65c )
AT_name( "__hidden#306_" ) 0x00000121: TAG_subprogram []
AT_low_pc( 0x0000a65c )
AT_high_pc( 0x0000a702 )
AT_name( "__hidden#305_" ) 0x0000012e: TAG_subprogram []
AT_low_pc( 0x0000a704 )
AT_high_pc( 0x0000a714 )
AT_name( "__hidden#304_" ) 0x0000013b: TAG_subprogram []
AT_low_pc( 0x0000a714 )
AT_high_pc( 0x0000a73a )
AT_name( "__hidden#302_" ) 0x00000148: TAG_subprogram []
AT_low_pc( 0x0000a73c )
AT_high_pc( 0x0000a796 )
AT_name( "__hidden#300_" ) 0x00000155: NULL 0x00000156: Compile Unit: length = 0x00000032 version = 0x0002 abbr_offset = 0x00000000 addr_size = 0x04 (next CU at 0x0000018c) 0x00000161: TAG_compile_unit [] *
AT_producer( "__hidden#30_" )
AT_language( DW_LANG_ObjC )
AT_name( "__hidden#317_" )
AT_stmt_list( 0x00000320 )
AT_comp_dir( "__hidden#41_" )
AT_APPLE_optimized( 0x01 )
AT_APPLE_major_runtime_vers( 0x02 )
AT_low_pc( 0x0000a798 )
AT_high_pc( 0x0000a7f4 ) 0x0000017e: TAG_subprogram []
AT_low_pc( 0x0000a798 )
AT_high_pc( 0x0000a7f4 )
AT_name( "__hidden#316_" ) 0x0000018b: NULL

竟然全部都是hidden!!

原来是我在用orgenizer 导出ipa时,使用了下图选项:

注意到这个 rebuild from bitcode 选项了吗?看看说明:

我选择了这个选项,之后使用导出的ipa和相应的dysm文件进行相应的操作,我们可以比较一下选和不选这个选项得到不同dysm的文件大小:

上边2个是使用 bitcode发布选项后,出现的dsym,每个之后12K。而下面那个是不使用的dsym,有2.1M。

之后查看了其他网页,有如下资料:

如果你的应用也准备启用Bitcode编译机制,就需要注意以下几点:

· Xcode 7默认开启Bitcode,如果应用开启Bitcode,那么其集成的其他第三方库也需要是Bitcode编译的包才能真正进行Bitcode编译

· 开启Bitcode编译后,编译产生的.app体积会变大(中间代码,不是用户下载的包),且.dSYM文件不能用来崩溃日志的符号化(用户下载的包是Apple服务重新编译产生的,有产生新的符号文件)

· 通过Archive方式上传AppStore的包,可以在Xcode的Organizer工具中下载对应安装包的新的符号文件              

就是说,发布时可以模拟appstore的bitcode功能,但是为什么有2个 dsym文件,而只有一个ipa文件呢?难道这个ipa文件会根据不同的机器安装成不同的2进制文件?有这么智能?

ios bitcode 机制对 dsym 调试文件的影响的更多相关文章

  1. iOS开发系列-iOS签名机制

    概述 想要了解iOS的签名机制需要有一定密码学有一定的了解.下面依次介绍的数据的加密解密.单向散列函数.数字签名.证书.iOS签名机制. 数据加密解密 在网络通信中想要防止数据被攻击者拦截,我们通常对 ...

  2. 【转】iOS开发Xcode7真机调试教程

    原文网址:https://www.skyfox.org/ios-xcode7-debug-device.html 从Xcode7开始,Xcode 不需要$99/$299升级开发者直接可以进行真机调试 ...

  3. iOS开发之Xcode常用调试技巧总结

    转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...

  4. ios消息机制

    ios消息机制介绍 ios 调用每一个方法的时候其实是走的ios的消息机制 举例介绍一下 创建一个Pserson类 有一个eat 对象方法 那么下面的代码可以用消息机制实现  导入消息头文件    # ...

  5. iOS签名机制解析

    最近遇到一个签名的问题,借机把iOS签名相关知识点研究了一下.现总结如下:(研究过程中参考了这位仁兄的博客.很全面,本文也有部分借鉴) 非对称加密 这个是签名机制的算法基础.所谓非对称加密的是相对于对 ...

  6. iOS推送证书转pem文件

    iOS推送证书转 .pem文件. 推送证书转pem文件openssl x509 -in apns_miaobozhibo.cer -inform der -out apns_miaobozhibo.p ...

  7. IOS 消息机制(NSNotificationCenter)

    消息机制 NSNotificationCenter 一直都在频繁使用,但是却对其原理不是十分了解.今天就花些时间,把消息机制原理重头到尾好好过一遍. iOS 提供了一种 "同步的" ...

  8. iOS开发拓展篇—封装音频文件播放工具类

    iOS开发拓展篇—封装音频文件播放工具类 一.简单说明 1.关于音乐播放的简单说明 (1)音乐播放用到一个叫做AVAudioPlayer的类 (2)AVAudioPlayer常用方法 加载音乐文件 - ...

  9. iOS事件机制(二)

    从上一篇的内容我们知道,在iOS中一个事件用一个UIEvent对象表示,UITouch用来表示一次对屏幕的操作动作,由多个UITouch对象构成了一个UIEvent对象.另外,UIResponder是 ...

随机推荐

  1. Yii2-Redis使用小记 - Cache(转)

    前些天简单学习了下 Redis,现在准备在项目上使用它了.我们目前用的是 Yii2 框架,在官网搜索了下 Redis,就发现了yii2-redis这扩展. 安装后使用超简单,打开 common/con ...

  2. Lnmp的安装、配置

    一.首先在本地安装好虚拟机,在虚拟机上安装centos6.5,由于习惯问题,不喜欢直接在虚拟机上操作linux系统,习惯了ssh过去,直接用xshell操作,这完全是个人习惯问题: 1.  用xshe ...

  3. JavaScript实现联想校招员工信息展示

    原文摘自我的前端博客,欢迎大家来访问 http://www.hacke2.cn 起因 今天和豪哥聊天,才知道他是我老乡,而且特别近..真的感觉他是我的贵人,这是他从 联想校招扣出来的,我们就用Java ...

  4. gulp进阶构建项目由浅入深

    gulp进阶构建项目由浅入深 阅读目录 gulp基本安装和使用 gulp API介绍 Gulp.src(globs[,options]) gulp.dest(path[,options]) gulp. ...

  5. 黑客攻防技术宝典Web实战篇(一)Web应用程序技术基础

    在开展Web应用程序渗透测试之前请先了解下面列出的这些内容,如果不是很懂的话,请读David Gourley & Brian Totty的HTTP权威指南也叫HTTP:The Definiti ...

  6. height:100%和height:auto的区别

    一直不明白height:100%和height:auto的区别,最近在制作前端页面时都用了height:100%;overflow:hidden; ,可是有些浏览器出现莫名的奇妙的问题,但换成heig ...

  7. [译]Node.js Best Practices - Part 2

    原文: https://blog.risingstack.com/node-js-best-practices-part-2/ 统一风格 在大团队开发JS应用, 创建一个风格指南是很有必要的. 推荐看 ...

  8. [译]Exploring Angular 1.3: Binding to Directive Controllers

    原文: http://blog.thoughtram.io/angularjs/2015/01/02/exploring-angular-1.3-bindToController.html Angul ...

  9. 【转载】利用Unity自带的合图切割功能将合图切割成子图

    虽然目前网上具有切割合图功能的工具不少,但大部分都是自动切割或者根据plist之类的合图文件切割的, 这种切割往往不可自己微调或者很难维调,导致效果不理想. 今天逛贴吧发现了一位网友写的切割合图插件很 ...

  10. 删除某一BSC在某一时间段内的数据

    DELETE FROM cdl_raw_do_12501_ztev8_sht_201509 WHERE call_start_time >= STR_TO_DATE( '2015-09-14 2 ...