首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >容易阅读Golang汇编输出?

容易阅读Golang汇编输出?
EN

Stack Overflow用户
提问于 2014-05-22 01:20:15
回答 6查看 16.6K关注 0票数 35

我对检查标准Go编译器的x86汇编输出很感兴趣,以查看我的代码是否真的被转换为相当有效的汇编代码;希望通过分析和检查汇编输出,我可以获得关于我应该在哪里/如何重写Go代码以获得最大性能的线索。但是当我使用-S标志检查代码时,Go显示出一片混乱!我想要两样东西:

  1. 有没有办法让Go编译器把汇编输出转储到一个文件中,而不仅仅是在Terminal?
  2. Also,上打印出来?有没有办法让Go编译器把汇编代码分成带标签的独立函数?我知道有些函数可能是内联的,因此不会出现在汇编代码中。我所看到的只是一个几乎不可能理解的同质的集合。
EN

回答 6

Stack Overflow用户

发布于 2014-05-22 02:25:00

  1. 您可以将输出重定向到如下文件:

转至工具compile -S file.go > file.s

  1. 您可以使用-N禁用优化:

go工具编译-S -N file.go

或者,您可以使用gccgo:

gccgo -S -O0 -masm=intel test.go

这将生成test.s。您可以使用-O0/1/2/3来查看不同的优化。

票数 34
EN

Stack Overflow用户

发布于 2014-05-22 03:39:49

我不推荐使用-S的输出,因为Go链接器可能会很大程度上改变写入目标代码的内容。它确实让你对正在发生的事情有了一些了解。

go汇编程序的输出也是相当不标准的。

当我想这样做的时候,我总是使用objdump,它会给你一个很好的标准汇编程序输出。

例如x86 / amd64

objdump -d executable > disassembly

而对于ARM (获得与Go使用的相同的寄存器名称)

objdump -M reg-names-raw -d executable > disassembly
票数 20
EN

Stack Overflow用户

发布于 2016-07-25 15:30:06

对生成的可执行文件运行go tool objdump

要将输出限制为感兴趣的函数,请使用其-s选项。

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

https://stackoverflow.com/questions/23789951

复制
相关文章

相似问题

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