美文网首页
Xcode全局断点停留在main函数

Xcode全局断点停留在main函数

作者: 土豆董 | 来源:发表于2018-08-31 18:03 被阅读94次

问题

在项目中打了全局异常断点,在app运行的时候直接停在main函数中,直接无视断点继续运行app还可以继续运行。有时候我们会自动忽略或者关掉全局异常断点,那么这个是什么问题导致的呢?


image.png

这个时候我们并不能发现是哪个地方出现了问题,
首先呢,确保自己的堆栈信息是没有经过筛选的

1535705838815.jpg

我们会发现堆栈信息中列表中出现了大量的和Font相关的堆栈信息,可以猜测更字体有关。
有一种更精准的方法,使用调试器来跟踪应用程序中的可疑字体。

第一步

点击FPFontCreateFontsWithPath () 这个堆栈信息


1535706403762.jpg

第二步

会看到断点停留在汇编指令 ,以及这个FPFontCreateFontsWithPath 的函数签名

0x189cbb008 <+196>:  bl     0x189cbb4fc               ; TFont::CreateFontEntitiesForFile(char const*, bool, TSimpleArray<TFont*>&, bool, short, char const*)
   0x189cbb00c <+200>:  ldr    x21, [sp, #0x30]

bl指令(带返回值的跳转指令):
将下一条指令的地址存储到lr(x30)寄存器中
跳转到标记处开始执行代码

第三步

我的手机是ARM64,或者你用的模拟器(x86_64)不过两者之间的汇编指令会有不同
通用寄存器
64bit的:x0~x28,29个寄存器每个寄存器都是64位的,64位就是8 个字节,一个寄存器最多能放8个字节的数据

方法的参数都储存在寄存器上面,bl指令执行完成后将下一条的指令的地址存储到lr ,那我们先从 x28 寄存器查看 鼠标右击print
会发现控制台

Printing description of $x28:
file:///var/containers/Bundle/Application/481B4BE4-65FC-48E7-9609-A88E46A5C1A5/Broker-Swift.app/PingFang.tt

我们发现我们工程中存在平方字体,导致我们每次启动App全局断点都会在main函数停留。

我们可以在工程中搜索PingFang 也可以控制台搜索 grep -r "PingFang"

最后

然后我们把这个字体改成系统字体就OK了~

偷懒的话,把全局断点Exceptions 从All 改成 Objective-C 也能搞定~

附上ARM文档地址:https://developer.arm.com/products/architecture

相关文章

网友评论

      本文标题:Xcode全局断点停留在main函数

      本文链接:https://www.haomeiwen.com/subject/onjswftx.html