7

Как просмотреть компилируемые искаженные имена для перегруженных функций в C++? Я использую VC9, но ответы на другие компиляторы тоже приветствуются.Просмотр компилятора Mangled Names в C++

Редактировать: Я нахожу здесь полезные ответы. Принимая тот, который мне больше всего понравился.

ответ

5

Вы можете посмотреть в файле карты. Предполагая, что вы создали генерацию файла карты.

+0

Что делать, если у вас есть несколько перегруженных те же функции? –

+0

Затем вы увидите много функций с тем же именем, которые были обернуты в различные искаженные формы, для каждой перегрузки. –

+0

Ну, тогда вы увидите несколько вариантов этой функции с каждой из них с искаженными именами. Таким образом, цель смены имени, чтобы избежать конфликтов имен. –

5

Вы можете просмотреть украшенные (измененные) имена с помощью Dumpbin.

8

Вы можете увидеть названия украшенных функций, используя Dependency Walker.

Откройте любую DLL \ EXE в ходу зависимостей, и в правой панели вы увидите список украшенных имен функций.

6

Поскольку вы также спрашиваете о других компиляторах. На gnu toolchain имеется инструмент, называемый nm. Вы получите его на linux и cygwin, и я считаю, что он также доступен в mingw. При вызове без параметров будут отображаться искаженные символы в двоичном формате. Вызов с помощью --demangle сделает очевидное.

3

В то время как все вышеизложенное работает, есть прекрасный способ просмотра исковеренных имен с помощью Listing Files: Страницы свойств проекта -> C/C++ -> Выходные файлы -> Ассемблерный выход.

(EDIT :)

Существует причина, только список файлов и DUMPBIN задокументированы в качестве способов увидеть декорированные имена. Как файл карты, так и зависимый ходок, предлагаемый в качестве решений, отображают только декорированные имена. Если у вас несколько перегрузок имени функции, вам будет трудно сопоставить их с различными украшенными именами, которые вы увидите. (Это более или менее реконструирует схему оформления. В то время как possible, он побеждает целую исходную цель.)

0

linux gnu tool chain nm command может использоваться для просмотра искаженного имени.

#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 [email protected]@GLIBCXX_3.4 
U [email protected]@GLIBCXX_3.4