如何查看 C++ 中重载函数的编译器生成的重载名称?我正在使用 VC9,但也欢迎其他编译器的答案。
编辑:我在这里找到所有有用的答案。接受我最喜欢的那个。
如何查看 C++ 中重载函数的编译器生成的重载名称?我正在使用 VC9,但也欢迎其他编译器的答案。
编辑:我在这里找到所有有用的答案。接受我最喜欢的那个。
您可以使用Dependency Walker查看修饰的函数名称。
在依赖遍历器中打开任何 DLL\EXE,在右侧窗格中您可以看到修饰函数名称的列表。
因为您还询问其他编译器。gnu 工具链上有一个叫 nm 的工具。你会在 linux 和 cygwin 上得到它,我相信它也可以在 mingw 中使用。不带参数调用它会在二进制文件中显示损坏的符号。用 --demangle 调用它会很明显。
您可以使用Dumpbin查看修饰(损坏)的名称。
您可以查看地图文件。假设您打开了地图文件生成。
虽然上述所有方法都有效,但有一个很好的记录方法可以通过使用列表文件来查看损坏的名称:项目属性页 -> C/C++ -> 输出文件 -> 汇编程序输出。
(编辑:)
只有列表文件和DUMPBIN被记录为查看修饰名称的方法是有原因的。建议作为解决方案的地图文件和依赖项walker都只显示修饰名称。如果您有多个函数名称重载,您将很难将它们与您看到的各种修饰名称相匹配。(这或多或少是在重构装饰方案。虽然可能,但它违背了整个最初的目的。)
linux gnu 工具链 nm 命令可用于查看损坏的名称。
#include<iostream>
using namespace std;
int fun1(){}
int fun1(int){}
int main()
{
return 0;
}
#g++ name_decoration_2.cpp
#nm a.out
...
...
000000000040064e T _Z4fun1i
0000000000400648 T _Z4fun1v
U _ZNSt8ios_base4InitC1Ev@@GLIBCXX_3.4
U _ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4