首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >给定c++行的转储程序集

给定c++行的转储程序集
EN

Stack Overflow用户
提问于 2015-03-09 19:31:27
回答 2查看 302关注 0票数 2

假设我有这样的代码(注意,在编辑器中,我可以看到行号)

代码语言:javascript
运行
复制
//File example_optimization.cpp

#1 int spreadi = (d_ai - d_bi);
#2 int transactionCosti = spreadi / (spreadi < 10 ? 1 : 10);

如果编译器是一个优化编译器,并且设置了正确的标志,我想向我自己证明,除法1实际上并没有发生。

在linux中是否有一个工具(或者可以通过管道使用的工具组合),我可以这样说:

代码语言:javascript
运行
复制
ctoassembler -c g++ -l 1 2 example_optimization.cpp 

这个命令说,调用ctoassembler使用编译器和链接器gnu g++,并转储c++文件example_optimization.cpp的第1行到第2行。默认情况是将汇编程序代码输出到stdout。

我不关心它的用法。我感兴趣的是能够看到编译器将我的代码转化为什么,而不必自己搜索它。

如果这样做更容易,我不介意使用对象文件,但无论如何,最好是“并排”显示c++源代码和相应的汇编程序代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-09 19:39:18

GCC将停止处理生成的汇编程序文件:

-S在编译阶段结束后停止,不要组装。输出以汇编程序代码文件的形式为每个指定的非汇编程序输入文件。默认情况下,源文件的汇编程序文件名是通过用‘.s’替换后缀‘.c’、‘I’等来创建的。 不需要编译的输入文件将被忽略。

来源:https://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html#Overall-Options

您的另一个选项是调试程序并查看汇编程序。

票数 1
EN

Stack Overflow用户

发布于 2015-03-09 19:47:48

通过gdb运行代码,在您想要的C行上放置一个断点,然后运行,然后键入disassemble来查看接下来的几行代码。

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

https://stackoverflow.com/questions/28950287

复制
相关文章

相似问题

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