如何在C ++中查看编译器生成的重载函数的损坏名称?我正在使用VC9,但欢迎其他编译器的答案。
修改:我发现这里的所有答案都很有用。接受我最喜欢的那个。
答案 0 :(得分:8)
您可以使用Dependency Walker来查看修饰的函数名称。
在依赖性walker中打开任何DLL \ EXE,在右侧窗格中可以看到修饰函数名称列表。
答案 1 :(得分:7)
因为您还询问其他编译器。 gnu工具链上有一个名为nm的工具。你将在linux和cygwin上得到它,我相信它也可以在mingw中使用。不带参数调用它会在二进制文件中显示损坏的符号。用--demangle调用它会很明显。
答案 2 :(得分:5)
您可以使用Dumpbin查看装饰(受损)名称。
答案 3 :(得分:5)
您可以查看地图文件。假设您已打开地图文件生成。
答案 4 :(得分:3)
虽然以上所有方法都有效,但有一种很好的documented方法可以使用Listing Files查看错位名称:项目属性页 - > C / C ++ - >输出文件 - >汇编程序输出。
(编辑:)
有一个原因只有列出文件和DUMPBIN被记录为查看装饰名称的方法。作为解决方案建议的地图文件和依赖性walker都显示仅装饰的名称。如果您有多个函数名重载,那么您很难将它们与您看到的各种装饰名称相匹配。 (这或多或少地重建了装饰方案。虽然possible,它却违背了整个原始目的。)
答案 5 :(得分:0)
linux gnu tool chain 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