笨辦法定位framework中的崩潰

用戶使用我們的framework,遇到了crash双炕,反饋了下面的調(diào)用堆棧袖肥。

2016-08-06 19:36:33.390 FxxxxxxxxxxxGame[9647:2085565] Uncaught exception: NSRangeException: *** -[__NSArrayM insertObject:atIndex:]: index 1 beyond bounds for empty array
(
    0   CoreFoundation                      0x000000018247edc8 <redacted> + 148
    1   libobjc.A.dylib                     0x0000000181ae3f80 objc_exception_throw + 56
    2   CoreFoundation                      0x0000000182362708 CFStringConvertNSStringEncodingToEncoding + 0
    3   FxxxxxxxxxxxGame                    0x00000001003fea6c -[txhw264encoder doencoder:withDataLen:withFrameIndex:withSyncId:TimeStamp:] + 964
    4   FxxxxxxxxxxxGame                    0x00000001003d97d0 _ZN23txrtmp_hw264_ObjEncCall18objectiveCallDoDecEPhiiil + 100
    5   FxxxxxxxxxxxGame                    0x00000001003ff1a4 _ZN21txrtmp_hw264_Hd264Enc7DoCodecEPhiii + 48
    6   FxxxxxxxxxxxGame                    0x00000001003ea7c0 _ZN12CH264Encoder11EncodeFrameEiPhiijj + 684
    7   FxxxxxxxxxxxGame                    0x00000001003eda50 _ZN16CTXH264EncThread10threadLoopEv + 68
    8   FxxxxxxxxxxxGame                    0x00000001003efe0c _ZN15TXMessageThreadI16CTXH264EncThreadE11_threadLoopEPv + 80
    9   libsystem_pthread.dylib             0x00000001820e3b28 <redacted> + 156
    10  libsystem_pthread.dylib             0x00000001820e3a8c <redacted> + 0
    11  libsystem_pthread.dylib             0x00000001820e1028 thread_start + 4
)

這個(gè)調(diào)用棧已經(jīng)精確到函數(shù)。我們拿到這個(gè)棋电,已經(jīng)知道是-[txhw264encoder doencoder:withDataLen:withFrameIndex:withSyncId:TimeStamp:]這個(gè)函數(shù)觸發(fā)了異常茎截,但是沒有指出來(lái)具體是那一行。

能定位到函數(shù)赶盔,那是因?yàn)槲覀兊絝ramewrok的符號(hào)表有這個(gè)名字企锌;他們沒有framewrok代碼,framewrok也沒有dSYM于未,定位不到具體的某行是正常的撕攒。

現(xiàn)在我們手頭上有用這個(gè)framework編的一個(gè)Demo,以及Demo的dSYM文件(事實(shí)上是這個(gè)Demo依賴了framework烘浦,當(dāng)自動(dòng)構(gòu)建編出Demo后抖坪,同時(shí)build的framewrok就直接拿來(lái)發(fā)布了)。能不能用這個(gè)來(lái)定位呢闷叉?
理論上說(shuō)應(yīng)該是可以擦俐,因?yàn)閒ramewrok本身沒有變化,我們要的是-[txhw264encoder doencoder:withDataLen:withFrameIndex:withSyncId:TimeStamp:] + 964 指向的究竟是哪一行握侧,這個(gè)偏移在Demo中并沒有發(fā)生變化蚯瞧。

現(xiàn)在問(wèn)題來(lái)了,怎么知道-[txhw264encoder doencoder:withDataLen:withFrameIndex:withSyncId:TimeStamp:]在Demo中的偏移品擎。搜索了一番后埋合,發(fā)現(xiàn)dwarfdump這個(gè)工具可以幫忙做到

$dwarfdump --arch=arm64 --find "-[txhw264encoder doencoder:withDataLen:withFrameIndex:withSyncId:TimeStamp:]" RTMPiOSDemo.app.dSYM/Contents/Resources/DWARF/RTMPiOSDemo
----------------------------------------------------------------------
 File: RTMPiOSDemo.app.dSYM/Contents/Resources/DWARF/RTMPiOSDemo (arm64)
----------------------------------------------------------------------
Searching .debug_pubnames for '-[txhw264encoder doencoder:withDataLen:withFrameIndex:withSyncId:TimeStamp:]'... 1 match:

0x0021b78b: TAG_subprogram [152] *
             AT_low_pc( 0x000000010004d330 )
             AT_high_pc( 0x000000010004d820 )
             AT_frame_base( reg29 )
             AT_object_pointer( {0x0021b7af} )
             AT_name( "-[txhw264encoder doencoder:withDataLen:withFrameIndex:withSyncId:TimeStamp:]" )
             AT_decl_file( "/data/rdm/projects/24662/RTMPSDK/H264/HW264_iOS/hw264encoder.m" )
             AT_decl_line( 143 )
             AT_prototyped( 0x01 )
             AT_type( {0x0021b199} ( int ) )
             AT_APPLE_optimized( 0x01 )

AT_low_pc就是加載的偏移。用計(jì)算器手動(dòng)算一下:0x000000010004d330+960=0x10004D6F0

$atos -arch arm64 -o RTMPiOSDemo.app.dSYM/Contents/Resources/DWARF/RTMPiOSDemo 0x10004D6F0
-[txhw264encoder doencoder:withDataLen:withFrameIndex:withSyncId:TimeStamp:] (in RTMPiOSDemo) (hw264encoder.m:231)

定位到具體的行了孽查。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饥悴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子盲再,更是在濱河造成了極大的恐慌西设,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件答朋,死亡現(xiàn)場(chǎng)離奇詭異贷揽,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)梦碗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門禽绪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人洪规,你說(shuō)我怎么就攤上這事印屁。” “怎么了斩例?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵雄人,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我念赶,道長(zhǎng)础钠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任叉谜,我火速辦了婚禮旗吁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘停局。我一直安慰自己很钓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布董栽。 她就那樣靜靜地躺著履怯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪裆泳。 梳的紋絲不亂的頭發(fā)上叹洲,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音工禾,去河邊找鬼运提。 笑死,一個(gè)胖子當(dāng)著我的面吹牛闻葵,可吹牛的內(nèi)容都是我干的民泵。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼槽畔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼栈妆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鳞尔,失蹤者是張志新(化名)和其女友劉穎嬉橙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寥假,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡市框,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了糕韧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枫振。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖萤彩,靈堂內(nèi)的尸體忽然破棺而出粪滤,到底是詐尸還是另有隱情,我是刑警寧澤雀扶,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布杖小,位于F島的核電站,受9級(jí)特大地震影響怕吴,放射性物質(zhì)發(fā)生泄漏窍侧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一转绷、第九天 我趴在偏房一處隱蔽的房頂上張望伟件。 院中可真熱鬧,春花似錦议经、人聲如沸斧账。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)咧织。三九已至,卻和暖如春籍救,著一層夾襖步出監(jiān)牢的瞬間习绢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工蝙昙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闪萄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓奇颠,卻偏偏與公主長(zhǎng)得像败去,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子烈拒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • Swift版本點(diǎn)擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 25,293評(píng)論 7 249
  • 該文章屬于劉小壯原創(chuàng)赊时,轉(zhuǎn)載請(qǐng)注明:劉小壯[http://www.reibang.com/u/2de707c93d...
    劉小壯閱讀 37,519評(píng)論 45 122
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件耿战、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,033評(píng)論 4 62
  • 復(fù)用類的方法:1剂陡、在新的類中產(chǎn)生現(xiàn)有類的對(duì)象,所以新的類由現(xiàn)有類的對(duì)象組成狐胎,這種方法為組合2鸭栖、按照現(xiàn)有類的類型來(lái)創(chuàng)...
    whyshang閱讀 376評(píng)論 0 0
  • Elliequeen閱讀 131評(píng)論 0 0