国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

iOS中CPU線程調(diào)試的高級(jí)技巧分享

2019-10-21 18:39:17
字體:
供稿:網(wǎng)友

前言

最近在開發(fā)直播,發(fā)現(xiàn)CPU性能被打滿后導(dǎo)致CPU降頻,發(fā)熱嚴(yán)重,然后卡頓…

為了定位這個(gè)問題我們花費(fèi)了至少 3天的時(shí)間 一點(diǎn)一點(diǎn)跟蹤C(jī)PU的線程代碼,當(dāng)遇到C++的thread的時(shí)候沒有符號(hào)表,只能看見一坨對(duì)象地址,除此以外連個(gè)方法名都沒有的時(shí)候真是手足無措.本篇介紹一個(gè)高級(jí)調(diào)試 方法,使用符號(hào)表和相關(guān) 指令尋蹤 相關(guān)代碼調(diào)用,寫的不好 大佬們請(qǐng)輕噴.代碼相關(guān)過程感謝同事 陳豪的大力支持.

Talk is cheap show me the code

我們的實(shí)現(xiàn)思路是找到動(dòng)態(tài)庫(kù)的首地址調(diào)用從此入手用相關(guān)指令恢復(fù)

前期準(zhǔn)備

build setting中開啟符號(hào)表

iOS,CPU,線程調(diào)試

1.導(dǎo)入頭文件

#import <mach-o/dyld.h>

這是mac os的可執(zhí)行文件的動(dòng)態(tài)鏈接庫(kù)頭文件 內(nèi)部?jī)?nèi)建函數(shù)有幾個(gè)我們需要用到

2.復(fù)制下面代碼到你的相關(guān)調(diào)用的地方

//1uint32_t count = _dyld_image_count();DDLogInfo(@"Dyld image count %d", count);//2for (int i = 0; i < count; i++) {char *image_name = (char *)_dyld_get_image_name(i);//3const struct mach_header *mh = _dyld_get_image_header(i);intptr_t vmaddr_slide = _dyld_get_image_vmaddr_slide(i);//4NSLog(@"Image name %s at address 0x%llx and ASLR slide 0x%lx./n",image_name, (mach_vm_address_t)mh, vmaddr_slide);}

我解釋一下以上代碼

1.拿出當(dāng)前鏡像數(shù)量

2.遍歷鏡像

3.獲取鏡像首地址

4.打印

然后運(yùn)行你的程序

然后看下控制臺(tái) 過濾一下 ASLR我們log中的鍵入內(nèi)容

iOS,CPU,線程調(diào)試

然后 點(diǎn)擊 工程中的Product

iOS,CPU,線程調(diào)試

右鍵 show in finder

iOS,CPU,線程調(diào)試

下一步驟 打開終端 cd 到這這個(gè)目錄(可以打開終端 輸入 cd 空格 拖拽那個(gè)文件夾)

iOS,CPU,線程調(diào)試

然后 pwd一下 看看

3.控制臺(tái)搜索相關(guān)我們打印log的代碼

找到我們第一條首地址

iOS,CPU,線程調(diào)試

注意:這一步非常重要 如果不好使,請(qǐng)重試幾次.

拿出main函數(shù)的首地址 ASLR中搜搜的 首地址然后復(fù)制 回到終端中輸入

atos -arch arm64 -o com_kwai_gif.app.dSYM/Contents/Resources/DWARF/com_kwai_gif -l 0x1006b8000

注意:這里是符號(hào)表路徑,如果不知道在哪里找到請(qǐng)google一下.

我們來測(cè)試一下 好不好使

首先在控制臺(tái)頂部的面板點(diǎn)擊

iOS,CPU,線程調(diào)試

然后 在 consolo中輸入 bt

iOS,CPU,線程調(diào)試

如果看到 如下內(nèi)容說明已經(jīng)成功.

iOS,CPU,線程調(diào)試

4.真機(jī)運(yùn)行 找出未知線程

首先點(diǎn)擊Xcode工程中的Profile運(yùn)行instruments,我這里是運(yùn)行工程之后 Xcode9.4可以無縫轉(zhuǎn)換到instruments

iOS,CPU,線程調(diào)試

我們找到相關(guān)線程 沒有名稱也不知道對(duì)象叫什么 就一個(gè)十六進(jìn)制地址

iOS,CPU,線程調(diào)試

我們隨便找個(gè)地址 在終端中輸入

iOS,CPU,線程調(diào)試

好了 如果有問題 請(qǐng)刪除product和符號(hào)表重新編譯

總結(jié)

CPU調(diào)試的過程非常麻煩,而且中間過程的代碼多數(shù)都是C++的調(diào)用,主要是線程消耗的開銷,中有很多收獲希望大家多多指教.

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到IOS開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 荣昌县| 美姑县| 东方市| 建阳市| 泸西县| 三河市| 西乌珠穆沁旗| 元朗区| 延长县| 凉城县| 申扎县| 宝坻区| 东乡县| 嘉义县| 鄂伦春自治旗| 万山特区| 东乡| 广河县| 延长县| 上思县| 云梦县| 五原县| 荥阳市| 镇坪县| 南丹县| 宁夏| 徐闻县| 洪洞县| 枝江市| 新巴尔虎右旗| 革吉县| 桂林市| 岱山县| 亚东县| 土默特右旗| 自治县| 拉孜县| 收藏| 白城市| 定南县| 乌兰县|