服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - iOS中CPU线程调试的高级技巧分享

iOS中CPU线程调试的高级技巧分享

2021-05-17 16:40東引甌越 IOS

这篇文章主要给大家介绍了关于iOS中CPU线程调试的高级技巧,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

最近在开发直播,发现cpu性能被打满后导致cpu降频,发热严重,然后卡顿…

为了定位这个问题我们花费了至少 3天的时间 一点一点跟踪cpu的线程代码,当遇到c++的thread的时候没有符号表,只能看见一坨对象地址,除此以外连个方法名都没有的时候真是手足无措.本篇介绍一个高级调试 方法,使用符号表和相关 指令寻踪 相关代码调用,写的不好 大佬们请轻喷.代码相关过程感谢同事 陈豪的大力支持.

talk is cheap show me the code

我们的实现思路是找到动态库的首地址调用从此入手用相关指令恢复

前期准备

build setting中开启符号表

iOS中CPU线程调试的高级技巧分享

1.导入头文件

?
1
#import <mach-o/dyld.h>

这是mac os的可执行文件的动态链接库头文件 内部内建函数有几个我们需要用到

2.复制下面代码到你的相关调用的地方

?
1
2
3
4
5
6
7
8
9
10
11
12
13
//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.拿出当前镜像数量

2.遍历镜像

3.获取镜像首地址

4.打印

然后运行你的程序

然后看下控制台 过滤一下 aslr我们log中的键入内容

iOS中CPU线程调试的高级技巧分享

然后 点击 工程中的product

iOS中CPU线程调试的高级技巧分享

右键 show in finder

iOS中CPU线程调试的高级技巧分享

下一步骤 打开终端 cd 到这这个目录(可以打开终端 输入 cd 空格 拖拽那个文件夹)

iOS中CPU线程调试的高级技巧分享

然后 pwd一下 看看

3.控制台搜索相关我们打印log的代码

找到我们第一条首地址

iOS中CPU线程调试的高级技巧分享

注意:这一步非常重要 如果不好使,请重试几次.

拿出main函数的首地址 aslr中搜搜的 首地址然后复制 回到终端中输入

?
1
atos -arch arm64 -o com_kwai_gif.app.dsym/contents/resources/dwarf/com_kwai_gif -l 0x1006b8000

注意:这里是符号表路径,如果不知道在哪里找到请google一下.

我们来测试一下 好不好使

首先在控制台顶部的面板点击

iOS中CPU线程调试的高级技巧分享

然后 在 consolo中输入 bt

iOS中CPU线程调试的高级技巧分享

如果看到 如下内容说明已经成功.

iOS中CPU线程调试的高级技巧分享

4.真机运行 找出未知线程

首先点击xcode工程中的profile运行instruments,我这里是运行工程之后 xcode9.4可以无缝转换到instruments

iOS中CPU线程调试的高级技巧分享

我们找到相关线程 没有名称也不知道对象叫什么 就一个十六进制地址

iOS中CPU线程调试的高级技巧分享

我们随便找个地址 在终端中输入

iOS中CPU线程调试的高级技巧分享

好了 如果有问题 请删除product和符号表重新编译

总结

cpu调试的过程非常麻烦,而且中间过程的代码多数都是c++的调用,主要是线程消耗的开销,中有很多收获希望大家多多指教.

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。

原文链接:https://www.sunyazhou.com/2018/08/17/20180817CPU-thread-debug/

延伸 · 阅读

精彩推荐
  • IOSiOS通过逆向理解Block的内存模型

    iOS通过逆向理解Block的内存模型

    自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自...

    Swiftyper12832021-03-03
  • IOSiOS中tableview 两级cell的展开与收回的示例代码

    iOS中tableview 两级cell的展开与收回的示例代码

    本篇文章主要介绍了iOS中tableview 两级cell的展开与收回的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    J_Kang3862021-04-22
  • IOSiOS布局渲染之UIView方法的调用时机详解

    iOS布局渲染之UIView方法的调用时机详解

    在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题,下面这篇文章主要给大家介绍了关于iOS布局渲染之UIView方法调用时机的相关资料...

    windtersharp7642021-05-04
  • IOSiOS 雷达效果实例详解

    iOS 雷达效果实例详解

    这篇文章主要介绍了iOS 雷达效果实例详解的相关资料,需要的朋友可以参考下...

    SimpleWorld11022021-01-28
  • IOS关于iOS自适应cell行高的那些事儿

    关于iOS自适应cell行高的那些事儿

    这篇文章主要给大家介绍了关于iOS自适应cell行高的那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    daisy6092021-05-17
  • IOSIOS 屏幕适配方案实现缩放window的示例代码

    IOS 屏幕适配方案实现缩放window的示例代码

    这篇文章主要介绍了IOS 屏幕适配方案实现缩放window的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    xiari5772021-06-01
  • IOS解析iOS开发中的FirstResponder第一响应对象

    解析iOS开发中的FirstResponder第一响应对象

    这篇文章主要介绍了解析iOS开发中的FirstResponder第一响应对象,包括View的FirstResponder的释放问题,需要的朋友可以参考下...

    一片枫叶4662020-12-25
  • IOSIOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解

    这篇文章主要介绍了IOS开发之字典转字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下...

    苦练内功5832021-04-01