前言
由于业务发展需要,公司自建了APM系统,考虑到性能问题,需要在Linux服务器上解析dSYM及系统库符号,于是便写了一个Go版本的atos工具。
dSYM解析
......
func findLine(dwarfData *dwarf.Data, address uint64, entry *dwarf.Entry) (uint64,error) {
var ErrUnknownLine = errors.New("ErrUnknownLine")
var lineNumber uint64
lineNumber = 0
var lineReader *dwarf.LineReader
var theErr error
if lineReader, theErr = dwarfData.LineReader(entry); theErr != nil {
log.Printf("findLine lineReader error")
return 0,ErrUnknownLine
}
// findPC
var line2 dwarf.LineEntry
lineNumber, err := ...(略)...
if err != nil {
log.Printf("lineReader findLine error")
return 0,ErrUnknownLine
}
return lineNumber,nil
}
......
详情请看源码
系统符号
提取符号
1.下载ipsw 文件
ipsw 固件下载地址: