문제

C ++에서 과부하 된 기능에 대한 컴파일러 생성 앵글링 이름을 어떻게 보나요? VC9를 사용하고 있지만 다른 컴파일러에 대한 답변도 환영합니다.

편집하다: 여기서 모든 답변이 유용하다고 생각합니다. 내가 가장 좋아하는 것을 받아 들였다.

도움이 되었습니까?

해결책

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

다른 팁

사용하여 장식 된 기능 이름을 볼 수 있습니다 의존성 워커.

종속성 워커에서 DLL exe를 열고 오른쪽 창에서 장식 된 기능 이름 목록을 볼 수 있습니다.

다른 컴파일러에 대해서도 묻기 때문에. GNU 도구 체인에는 NM이라는 도구가 있습니다. Linux와 Cygwin에서 얻을 수 있으며 Mingw에서도 사용할 수 있다고 생각합니다. 매개 변수로 호출하면 바이너리에 엉망인 기호가 표시됩니다. -demangle로 그것을 부르면 명백한 일이 될 것입니다.

당신은 장식 된 (엉망인) 이름을 볼 수 있습니다 덤프 빈.

위의 모든 것이 작동하는 동안 멋지게 문서화 사용하여 망가진 이름을 보는 방법 나열 파일: 프로젝트 속성 페이지 -> c/c ++ -> 출력 파일 -> 어셈블러 출력.

(편집하다:)

나열된 파일 만 이유가 있습니다 덤프 빈 장식 된 이름을 볼 수있는 방법으로 문서화됩니다. Solutions, Display로 제안 된지도 파일과 종속성 워커 장식 된 이름. 기능 이름의 여러 오버로드가있는 경우 볼 수있는 다양한 장식 이름과 일치하는 데 어려움을 겪을 수 있습니다. (그것은 장식 계획을 다소 재구성하는 것입니다. 가능한, 그것은 원래의 전체 목적을 물리칩니다.)

Linux GNU Tool Chain NM 명령을 사용하여 Mangled Name을 볼 수 있습니다.

#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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top