C ++ 용 온라인 이름 demangler가 있습니까? [닫은]


109

상당히 길고 혼란스러운 링크 오류가 발생하고 있습니다. 일부 웹 사이트의 일부 텍스트 상자에 붙여넣고 이름이 엉키지 않게하면 좋을 것입니다.

누구든지 그러한 서비스를 알고 있습니까?


3
Btw, 당신의 컴파일러는 무엇입니까? 함께 제공된 준비된 도구를 사용할 수 있습니다.
sharptooth

4
"undname.exe"를 찾았고 VC ++에서 작동했습니다.
Roman Starkov 2010 년

3
여기에 이름을 붙여 넣으세요. VC2005 이름이면 이름을 떼어 내겠습니다.
xtofl 2010 년

답변:


133

나는 그러한 온라인 서비스를 만들었습니다. https://demangler.com

이것은 gcc C ++ 기호 demangler입니다. 스택 추적 또는 nm의 출력을 텍스트 상자에 복사하면 이름이 demangled 된 출력이 반환됩니다.

@Update : 이제 MSVC 및 Java 기호도 제거됩니다.


이 나를 위해 일 하나,하지만 더 인기있는 대답의 하나 _ZN9cdnalizer11rewriteHTMLINS_6apache8IteratorEcEET_RKSsRKNS_6ConfigES3_S3_St8functionIFS3_RKS3_SB_EES9_IFvSsEE
matiu

Demangler는 Itanium에 대한 참조 한정자를 제거 할 수 없습니다. Clang에서 생성 한 _ZNR4test1fEv를보고 있습니다.
Puppy

고마워, 좋은 사이트! white-space: normalresponseSection <pre> 태그 를 추가 하거나 이와 유사하게 해주시겠습니까 (줄 번호를 추가 할 수도 있음)? 긴 한 줄 출력은 현재 읽을 수 없습니다.
jplatte 2014-06-22

1
너 조심하는 게 좋아. demangler의 실제 구현은 대부분 끔찍하게 버그가 많고 안전하지 않습니다. 기본적으로 동일한 플랫폼에서 생성 된 이름이 엉망인 경우에만 작동하지만, 일반 입력에서 매우 복잡하거나 메모리 오류가 평평해질 수 있습니다.
Kerrek SB

8
나는 그것을 정기적으로 사용했습니다. 그것은 아래로 나타납니다 though.It는 아주 좋은, 유용한 페이지이었다
chrise

104

이것은 조금 늦을 수도 있지만이 질문을 기반으로 하나를 만들었습니다. 내가 시도한 입력으로 작동하고, Emscripten을 통해 Javascript로 컴파일 된 __cxa_demangle 및 __unDName을 통해 g ++ 및 msvc ++를 지원합니다. 이것이 누군가에게 도움이 되기를 바랍니다 : c ++ filtjs

편집 : 이스케이프 문제 수정


6
대박! 감사합니다! 페이지 어딘가에 "Online C ++ name demangler"를 언급하여 사람들이 Google을 통해 귀하를 찾을 수 있도록 하시겠습니까?
Roman Starkov

1
알겠습니다. 지금 수정해야합니다.
nattofriends

3
@Zibri : "작은 C 소스"가 온라인 상태가 아닙니다. 이를 위해 기존 c ++ filt 및 undname 유틸리티를 사용하십시오.
nattofriends 2013 년

1
@nattofriends : 도구가 대괄호를 벗어나지 않는 것 같습니다 ??_R3?$KxSet@V?$KxSpe@DI@@I@@8.을 참조하십시오 .
Mooing Duck 2013

2
다른 사람들이 언급 한 템플릿으로 문제를 해결할 수 있다면 매우 도움이 될 것입니다. 이것은 SO에 대해 적어도 하나의 가짜 질문 을 일으켰습니다 .
Shafik Yaghmour 2014 년

24

대부분의 (전부는 아니지만) C ++ 컴파일러는 c++filt사용자가 찾고있는 것을 정확하게 수행하는 도구 와 함께 제공됩니다 .

마우스 클릭으로 원하는 경우 ... 그에 대한 GUI를 작성하십시오;)


나는 마우스 클릭이 아닌 최소한의 노력으로 그것을 원합니다. :) 아 글쎄, 어쨌든 자주 필요하지 않습니다.
Roman Starkov 2010 년

3
C ++ filt의 일반적인 사용 사례는 objdump -dr ./AClass.o | c++filt | less(디스어셈블러) 또는 nm ./AClass.o | c++filt | less(객체 파일 내부의 기호 목록)
Dummy00001

2
대부분의 컴파일러는 GCC가 아닙니다. GCC가 아닌 컴파일러는 C ++ filt를 제공하지 않습니다. 유도에 의해 대부분의 컴파일러는 c ++ filt를 제공하지 않습니다.
IInspectable

9

두 가지 복사 및 붙여 넣기 온라인 솔루션이 있습니다.

GCC 및 Clang에 대한 지원 만 필요한 경우 가장 다재다능한 온라인 C ++ 컴파일러 인 Coliru 를 사용할 수도 있습니다 .

이것은 잘라 내기, 붙여 넣기 및 클릭만큼 간단하지는 않지만 그다지 어렵지는 않으며 위에서 언급 한대로 템플릿 매개 변수에 문제가없는 것처럼 보입니다. 다음과 같이 실행하려면 명령 줄을 수정하기 만하면됩니다.

cat main.cpp | c++filt -t

다음 예제통해 실시간으로 확인하십시오 .

_Z6kernelIfLj3EEvPT_5arrayIPKS0_XT0_EES5_S2_IjXT0_EES6_S0_

에:

void kernel<float, 3u>(float*, array<float const*, 3u>, array<float const*, 3u>, array<unsigned int, 3u>, array<unsigned int, 3u>, float)
           ^^^^^^^^^^^

1

참고로, Borland / MS / 무엇이든 엉망이 된 이름을 무너 뜨리는 Ruby gem도 있습니다 : unmangler

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.