8

如何查看 C++ 中重载函数的编译器生成的重载名称?我正在使用 VC9,但也欢迎其他编译器的答案。

编辑:我在这里找到所有有用的答案。接受我最喜欢的那个。

4

6 回答 6

8

您可以使用Dependency Walker查看修饰的函数名称。

在依赖遍历器中打开任何 DLL\EXE,在右侧窗格中您可以看到修饰函数名称的列表。

于 2009-04-16T06:00:53.600 回答
7

因为您还询问其他编译器。gnu 工具链上有一个叫 nm 的工具。你会在 linux 和 cygwin 上得到它,我相信它也可以在 mingw 中使用。不带参数调用它会在二进制文件中显示损坏的符号。用 --demangle 调用它会很明显。

于 2009-04-16T06:11:56.677 回答
5

您可以使用Dumpbin查看修饰(损坏)的名称。

于 2009-04-16T05:44:09.240 回答
5

您可以查看地图文件。假设您打开了地图文件生成。

于 2009-04-16T05:55:40.413 回答
3

虽然上述所有方法都有效,但有一个很好的记录方法可以通过使用列表文件来查看损坏的名称:项目属性页 -> C/C++ -> 输出文件 -> 汇编程序输出。

(编辑:)

只有列表文件和DUMPBIN被记录为查看修饰名称的方法是有原因的。建议作为解决方案的地图文件和依赖项walker都只显示修饰名称。如果您有多个函数名称重载,您将很难将它们与您看到的各种修饰名称相匹配。(这或多或少是在重构装饰方案。虽然可能,但它违背了整个最初的目的。)

于 2009-05-08T19:49:37.893 回答
2

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
于 2015-11-03T10:11:05.367 回答