7

C++에서 오버로드 된 함수에 대한 컴파일러 생성 된 이름을 보려면 어떻게합니까? VC9를 사용하고 있지만 다른 컴파일러에 대한 답변도 환영합니다.C++에서 컴파일러 맹 글링 된 이름보기

편집 : 여기서 모든 대답이 유용합니다. 내가 제일 좋아했던 것을 받아 들였다.

답변

5

지도 파일을 볼 수 있습니다. 지도 파일 생성이 켜져 있다고 가정합니다.

+0

당신이 동일한 기능의 여러 과부하가 있다면? –

+0

그러면 각각의 과부하에 대해 서로 다른 맹 글링 된 양식으로 묶인 동일한 이름을 가진 많은 함수가 표시됩니다. –

+0

그럼 당신은 각 기능이 여러 버전으로 표시됩니다. 이름 맹 글링의 목적은 이름 충돌을 피하기 위해서입니다. –

5

장식 된 (맹 글링 된) 이름을 Dumpbin으로 볼 수 있습니다.

8

Dependency Walker을 사용하여 데코 레이팅 된 함수 이름을 볼 수 있습니다.

종속성 워커에서 DLL \ EXE를 열고 오른쪽 창에서 데코 레이팅 된 함수 이름 목록을 볼 수 있습니다.

6

다른 컴파일러에 대해서도 물어 보았습니다. GNU toolchain에는 nm이라는 도구가 있습니다. 당신은 리눅스와 cygwin에서 그것을 얻을 것이며, 나는 또한 mingw에서 사용할 수 있다고 생각합니다. 매개 변수없이 호출하면 바이너리에 변조 된 기호가 표시됩니다. --demangle을 사용하여 호출하면 확실합니다.

3

위의 모든 작업을 수행하는 동안 Listing Files : 프로젝트 속성 페이지 -> C/C++ -> 출력 파일 -> 어셈블러 출력을 사용하여 변환 된 이름을 볼 수 있습니다.

은 (편집 :

만 목록 파일과 DUMPBIN가 장식 된 이름을 볼 수있는 방법으로 문서화 이유가있다. 솔루션으로 제안 된 맵 파일과 종속성 워커는 모두 데코 레이팅 된 이름 만 표시합니다. 함수 이름에 과부하가 여러 개있는 경우 사용자가 볼 수있는 다양한 데코 레이팅 된 이름과 일치시키지 못합니다. (장식 체계를 다소 재구성합니다.) possible은 원래의 목적을 모두 상실합니다.)

0

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