最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年11月15日 10:34:51   作者:東引甌越  
這篇文章主要給大家介紹了關(guān)于iOS中CPU線程調(diào)試的高級技巧,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

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

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

Talk is cheap show me the code

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

前期準備

build setting中開啟符號表


1.導入頭文件

#import <mach-o/dyld.h>

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

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

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

我解釋一下以上代碼

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

2.遍歷鏡像

3.獲取鏡像首地址

4.打印

然后運行你的程序

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

然后 點擊 工程中的Product

右鍵 show in finder

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

然后 pwd一下 看看

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

找到我們第一條首地址

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

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

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

注意:這里是符號表路徑,如果不知道在哪里找到請google一下.

我們來測試一下 好不好使

首先在控制臺頂部的面板點擊

然后 在 consolo中輸入 bt

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

4.真機運行 找出未知線程

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

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

我們隨便找個地址 在終端中輸入

好了 如果有問題 請刪除product和符號表重新編譯

總結(jié)

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

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • iOS實現(xiàn)UIScrollView的無限輪播功能(原理)詳解

    iOS實現(xiàn)UIScrollView的無限輪播功能(原理)詳解

    在現(xiàn)在的一些App中常常見到圖片輪播器,一般用于展示廣告、新聞等數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于iOS實現(xiàn)UIScrollView的無限輪播功能(原理)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-09-09
  • 使用UItableview在iOS應(yīng)用開發(fā)中實現(xiàn)好友列表功能

    使用UItableview在iOS應(yīng)用開發(fā)中實現(xiàn)好友列表功能

    這篇文章主要介紹了使用UItableview在iOS應(yīng)用開發(fā)中實現(xiàn)一個好友列表功能的方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下
    2015-12-12
  • iOS設(shè)計模式——Category簡單介紹

    iOS設(shè)計模式——Category簡單介紹

    這篇文章主要介紹了iOS設(shè)計模式——Category簡單介紹,有興趣學習的同學可以了解一下。
    2016-11-11
  • 分享一些iOS開發(fā)實用的小技巧

    分享一些iOS開發(fā)實用的小技巧

    這篇文章主要給大家分享了一些iOS開發(fā)實用的小技巧,這些小技巧在大家開發(fā)iOS的時候還是相當實用,有需要的朋友們下面來一起看看吧。
    2016-09-09
  • iOS指紋驗證TouchID應(yīng)用學習教程

    iOS指紋驗證TouchID應(yīng)用學習教程

    這篇文章主要為大家詳細iOS指紋驗證TouchID應(yīng)用學習教程的第一篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • IOS上實現(xiàn)的自定義儀表盤示例

    IOS上實現(xiàn)的自定義儀表盤示例

    本篇文章主要介紹了IOS上實現(xiàn)的自定義儀表盤示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • iOS實現(xiàn)微信支付流程詳解

    iOS實現(xiàn)微信支付流程詳解

    本篇文章主要介紹了iOS實現(xiàn)微信支付流程詳解 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 詳解iOS設(shè)計中的UIWindow使用

    詳解iOS設(shè)計中的UIWindow使用

    這篇文章主要介紹了iOS設(shè)計中的UIWindow使用,包括UIWindowLevel和KeyWindow兩個大的方面的講解,需要的朋友可以參考下
    2015-09-09
  • IOS如何替換電話號碼中間4位為

    IOS如何替換電話號碼中間4位為"-"符號

    這篇文章主要為大家詳細介紹了IOS如何替換電話號碼中間4位為-符號的方法,感興趣的小伙伴們可以參考一下
    2016-07-07
  • iOS簡單實現(xiàn)輪播圖效果

    iOS簡單實現(xiàn)輪播圖效果

    這篇文章主要為大家詳細介紹了iOS簡單實現(xiàn)輪播圖效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評論

驻马店市| 潜山县| 嘉义县| 阳原县| 曲阜市| 方正县| 礼泉县| 兴业县| 南宁市| 南京市| 松潘县| 秦皇岛市| 天镇县| 广昌县| 招远市| 上饶县| 武义县| 新巴尔虎左旗| 大石桥市| 安丘市| 永康市| 山阳县| 昌黎县| 广元市| 安吉县| 甘德县| 五常市| 安丘市| 大关县| 祁门县| 虹口区| 山东省| 大余县| 郁南县| 长沙市| 龙川县| 子长县| 五原县| 隆子县| 翁牛特旗| 滦南县|