Dav*_*Lee 16
我不知道有什么方法可以过滤 Xcode 显示的内容,但您可能会发现 lldb 的 Python 脚本很有帮助。至少有三种可能的方法来过滤堆栈:
首先,要按名称过滤堆栈,可以使用正则表达式来检查函数名称。正则表达式可以匹配您要删除的帧,也可以匹配您要保留的帧。从给定的堆栈跟踪中,我无法确定您要保留哪些,因此我将演示如何删除 Realm 框架:
(lldb) script
import re
for frame in lldb.thread:
if not re.search("[Rr]ealm|RLM", frame.name):
print(f"{frame.idx}: {frame.name}")
Run Code Online (Sandbox Code Playgroud)
按函数名称匹配并不总是理想的,它可能是一个很长或复杂的正则表达式。如果要过滤的库恰好是动态库或框架,那么最简单的方法是按“模块”过滤:
(lldb) script
for frame in lldb.thread:
if frame.module.file.basename != "Realm":
print(f"{frame.idx}: {frame.name}")
Run Code Online (Sandbox Code Playgroud)
第三个选项是按与每个帧关联的源路径进行过滤。我不知道这对 Realm 有用(这取决于调试信息),但我已经用 RxSwift 做到了。在此示例中,RxSwift/不会打印源路径中包含的帧:
(lldb) script
for frame in lldb.thread:
if "RxSwift/" not in frame.line_entry.file.fullpath:
print(f"{frame.idx}: {frame.name}")
Run Code Online (Sandbox Code Playgroud)
这些方法可以结合起来制作适合您项目的堆栈跟踪命令。要执行该命令,请将您的自定义for循环放入一个文件中,然后从您的~/.lldbinit:
command script import path/to/mystack.py
Run Code Online (Sandbox Code Playgroud)
编写 lldb 命令时,需要进行一些更改。这是一个结合了上述两种方法的示例:
command script import path/to/mystack.py
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1150 次 |
| 最近记录: |