首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用atos?(或Mac上的addr2line )

如何使用atos?(或Mac上的addr2line )
EN

Stack Overflow用户
提问于 2019-01-23 04:31:19
回答 1查看 5.2K关注 0票数 1

我看到以下使用addr2line的示例。但是atosaddr2line的接口是不同的。我不知道如何使用atos使其工作。有人能教我如何把它转换成使用atos吗?

https://balau82.wordpress.com/2010/10/06/trace-and-profile-function-calls-with-gcc/

或者,是否有一种方法可以使addr2line在Mac上工作(众所周知,addr2line在Mac上不能很好地工作)?我只是得到??而不是使用addr2line的函数名。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-01-23 06:00:02

在您链接的文章中的脚本中有两种使用addr2line的方式:

代码语言:javascript
复制
addr2line -f -e ${EXECUTABLE} ${FADDR}

以及:

代码语言:javascript
复制
addr2line -s -e ${EXECUTABLE} ${CADDR}

第一个选项使用-f选项,该选项使addr2line在第二行显示文件名和行号之前将函数名单独输出到一行。在该脚本中,只使用第一行(它是通过head -1管道传输的)。

atos总是输出函数名,因此不需要与该-f选项等效。addr2line是"address to line“(文件名和行号)的缩写,使函数名附属于其主要用途,而atos是”地址到符号“的缩写,因此产生符号名是其核心目的。

addr2line的下一个选项是-e ${EXECUTABLE}atos的等价物是-o ${EXECUTABLE}

在那之后,论点就是地址。这在addr2lineatos之间是一样的。

因此,对应于addr2line -f -e ${EXECUTABLE} ${FADDR}addr2line -f -e ${EXECUTABLE} ${FADDR}命令是atos -o ${EXECUTABLE} ${FADDR}--但是--脚本正在“解析”来自命令的输出,两个程序以不同的格式生成输出。要从atos的输出中获得函数名,您可以通过perl -lne 'print "$1" if m/^(.*) \(in .*\)/'传递它。

第二种类型的addr2line命令不使用-f选项,因此它不打印函数名。它只是用来获取文件名和行号。如前所述,atos总是打印函数名。因此,atos命令与以前相同。要从它的输出中获得文件名和行号,可以通过perl -lne 'print "$1" if m/^.* \(in .*\) \((.*)\)$/'进行管道传输。

addr2line命令还使用-s选项。这使得它只打印文件路径的基本名称,而不是整个路径。无论如何,这就是atos所做的,所以没有必要将该选项转换为任何东西。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54320054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档