Swift 符号清洗

swift在crash堆栈里的信息是蛮奇怪的,比如说这种:
_TtC16MTSS_SDKTestDemo13WXCrashTestVC
其实他这是经过Name demangle名字命名技术之后,让人看起来诡异,如何清洗成正常的符号呢:

xcrun swift-demangle __TFV5hello4Rectg9subscriptFOS_9DirectionSi

清洗成人眼可看的符号了

说到底swift的Name demangle是抄的c++的Name demangle技术,swift的符号命名规则详见swift符号规则

oc-Swift混编 oc调用swift类的

app名-Swift.h文件,这里会存放着swift转义成oc的类的列表,如果在oc里需要通过runtime调用swift类,则需要调用转义之后的swift类名,如下图中的_TtC16MTSS_SDKTestDemo13WXCrashTestVC

如何寻找编译之后的app名-Swift.h文件,找到编译日志里的swiftFileList位置就行了,和这个放在同一级目录下,

C++符号清洗

c++filt -n  _ZN5physx2Gu24PCMMeshContactGenerationC2ERKNS_6shdfnd3aos6FloatVES6_RKNS3_12PsTransformVES9_RNS0_33MultiplePersistentContactManifoldERNS0_13ContactBufferE

一般来说c++filt命令要加-n参数,才能正常解析

参考文章:c++符号清洗


宋冬野
32 声望4 粉丝