C ++ için çevrimiçi bir isim tanımlayıcı var mı? [kapalı]


109

Oldukça uzun ve kafa karıştırıcı bir bağlantı hatası alıyorum ve bunu bir web sitesinde bir metin kutusuna yapıştırıp isimleri benim için çözebilirsem çok sevinirim.

Böyle bir hizmeti bilen var mı?


3
Btw, derleyiciniz nedir? Belki onunla birlikte gönderilen hazır bir aracı kullanabilirsiniz.
keskin dişli

4
"Undname.exe" yi buldum ve işi VC ++ için yaptı.
Roman Starkov

3
isminizi buraya yapıştırın ve eğer bir VC2005 ismiyse onu çözeceğim.
xtofl

Yanıtlar:


133

Böyle bir çevrimiçi hizmet oluşturdum: https://demangler.com

Bu bir gcc c ++ sembolü çözücüdür. Sadece bir yığın izini veya nm çıktısını bir metin kutusuna kopyalarsınız ve çıktıyı adlar çözülmüş olarak döndürür.

@Update: Artık MSVC ve Java sembollerini de ayrıştırıyor.


Bu benim için çalıştı, ancak daha popüler yanıttaki değil: _ZN9cdnalizer11rewriteHTMLINS_6apache8IteratorEcEET_RKSsRKNS_6ConfigES3_S3_St8functionIFS3_RKS3_SB_EES9_IFvSsEE
matiu

Demangler'ınız, Itanium için ref niteleyicilerinden kurtulamaz. Clang tarafından oluşturulan _ZNR4test1fEv'e bakıyorum.
Yavru Köpek

Teşekkürler, güzel site! Lütfen white-space: normalresponseSection <pre> etiketine (ve belki satır numaralarını ekleyebilir) ekleyebilir veya benzer olabilir misiniz ? Uzun tek satırlık çıktı şu anda okunamıyor.
jplatte

1
Dikkat etmelisin. Demanglers'ın gerçek dünyadaki uygulamalarının çoğu korkunç derecede hatalı ve güvensizdir. Temelde yalnızca aynı platformun ürettiği karışık isimler üzerinde çalışırlar, ancak genel girdilerde yüksek karmaşıklık veya düz bellek hataları ile karşılaşabilirler.
Kerrek SB

8
Düzenli olarak kullandım. Çok güzel, kullanışlı bir
sayfaydı

104

Bu biraz geç olabilir, ancak bu soruya dayanarak bir tane oluşturdum. Denediğim girdilerle çalışıyor, __cxa_demangle ve __unDName aracılığıyla g ++ ve msvc ++ 'yı destekliyor, Emscripten aracılığıyla Javascript'e derlenmiş. Umarım bu birisine yardımcı olur: c ++ filtjs

Düzenleme: Çıkış sorunu düzeltildi


6
Müthiş! Teşekkür ederim! İnsanların sizi Google aracılığıyla bulabilmesi için sayfanın herhangi bir yerinde "Çevrimiçi C ++ adı çözücü" nden bahsedebilirsiniz.
Roman Starkov

1
Tamam, şimdi düzeltilmelidir.
nattofriends

3
@Zibri: "Küçük C kaynağı" çevrimiçi değil. Bunun için mevcut c ++ filt ve undname yardımcı programlarını kullanın.
nattofriends

1
@nattofriends: Aracınız parantezlerden kaçıyor gibi görünmüyor, bakın ??_R3?$KxSet@V?$KxSpe@DI@@I@@8.
Mooing Duck

2
Sorununuzu başkalarının bahsettiği şablonlarla çözebilmeniz çok yardımcı olacaktır. Bu, SO'da en az bir sahte soruya neden oldu .
Shafik Yaghmour

24

C ++ derleyicilerinin çoğu (hepsi değilse de) c++filtgörünüşte aradığınız şeyi tam olarak yapan bir araçla birlikte gelir .

Fare tıklamasıyla istiyorsanız ... bunun için bir GUI yazın;)


Bir fare tıklaması yerine asgari çabayla istiyorum :) Oh pekala, zaten buna çok sık ihtiyacım yok.
Roman Starkov

3
c ++ filt için her zamanki kullanım durumum objdump -dr ./AClass.o | c++filt | less(disassembler) veya nm ./AClass.o | c++filt | less(nesne dosyasının içindeki sembollerin listesi)
Dummy00001

2
Çoğu derleyici GCC değildir. GCC olmayan derleyiciler c ++ filt göndermez. Tümevarım yoluyla, çoğu derleyici c ++ filt göndermez.
2019

9

Kopyala ve yapıştır iki çevrimiçi çözüm vardır:

Yalnızca GCC ve Clang için desteğe ihtiyacınız varsa , muhtemelen en çok yönlü çevrimiçi C ++ derleyicisi olan Coliru'yu kullanma seçeneğiniz de vardır .

Bu, kes, yapıştır ve tıkla kadar basit değil - ama çok da zor değil - ve yukarıda belirtildiği gibi şablon parametrelerinde herhangi bir sorun yok gibi görünüyor. Bunun gibi bir şey çalıştırmak için komut satırını değiştirmeniz yeterlidir:

cat main.cpp | c++filt -t

Bunu çözen bu örnekle canlı görün :

_Z6kernelIfLj3EEvPT_5arrayIPKS0_XT0_EES5_S2_IjXT0_EES6_S0_

için:

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

1

Bilginize, Borland / MS / karıştırılan isimler ne olursa olsun parçalamak için bir Ruby cevheri de var: unmangler

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.