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



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

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

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

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

ctoassembler -c g++ -l 1 2 example_optimization.cpp 

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

我真的不在乎用法是什么。我有兴趣能够看到编译器将我的代码转换为什么,而无需自己搜索。

我不介意使用目标文件,如果这样可以更容易,但不知何故,最好"并排"显示 c++ 源代码和相应的汇编代码。

GCC 将停止生成汇编文件:

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

不需要编译的输入文件将被忽略。

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

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

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

最新更新