我们可以检查目标文件中是否存在由 C++ 引入的临时文件吗?编译器?
有没有办法检查从下面的代码( file1.o )生成的目标文件是否存在临时引入的编译器?我们可以使用什么工具从目标文件中获取此类信息?
//file1.cpp
void func(const int& num){}
int main(){ func(2); }
Is there a way to inspect object file generated from code below ( file1.o ) for presence of compiler introduced temporary? What tools can we use to obtain such info from object files?
//file1.cpp
void func(const int& num){}
int main(){ func(2); }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我能想到的最简单的方法是加载一个使用目标文件的程序并在调试器中反汇编该函数。您发布的程序代码可以很好地解决此问题。只需中断对
func
的调用,然后在单步执行该函数时显示汇编器。在更复杂的程序中,您通常可以按名称显示给定函数的汇编代码。检查调试器文档以了解如何执行此操作。在 Windows (Visual Studio) 上,您可以打开“反汇编”窗口并输入函数名称以显示汇编代码。
如果您有源代码,大多数编译器允许您输出汇编程序,有时与源代码混合。对于 Visual C++,这是 /Fa 。
The easiest way I can think of to do this is to load up a program that uses the object file and disassemble the function in the debugger. The program code you posted would work fine for this. Just break on the call to
func
and then display the assembler when you single-step into the function.In a more complex program you can usually display the assembler code for a given function by name. Check your debugger documentation for how to do this. On Windows (Visual Studio) you can open the
Disassembly
window and enter the name of the function to display the assembler code.If you have the source, most compilers allow you to output assembler, sometimes mixed with the source code. For Visual C++ this is /Fa.
如果您使用的是 ELF 系统并且有 GNU binutils,您可以调用
readelf
,可能使用-s
开关。If you're on an ELF system and have GNU binutils you can call
readelf
, probably with the-s
switch.如果您有可用的源代码,那么查看编译器生成的汇编程序文件(对于 gcc 为 -save-temps)可能会更容易。否则,
objdump
就是你的朋友。If you have the source available, it is probably easier to look at the assembler file generated by the compiler (-save-temps for gcc). Otherwise,
objdump
is your friend.您可以使用 clang -cc1 --ast-print-xml 来获取翻译单元的 XML 表示形式。通过 AST 可以轻松检测到临时体的存在。
You can use
clang -cc1 --ast-print-xml
to get a XML representation of a translation unit. The presence of temporaries can be easily detected from the AST.