क्या C ++ के लिए एक ऑनलाइन नाम डेमोंगलर है? [बन्द है]


109

मुझे एक काफी लंबी और भ्रमित करने वाली लिंक त्रुटि मिल रही है, और मुझे अच्छा लगेगा यदि मैं इसे किसी वेबसाइट पर कुछ टेक्स्टबॉक्स में पेस्ट कर सकता हूं और मेरे लिए अन-मैनग्ल्ड नाम है।

क्या कोई ऐसी सेवा के बारे में जानता है?


3
Btw, आपका कंपाइलर क्या है? हो सकता है कि आप बस इसके साथ तैयार एक तैयार टूल का उपयोग कर सकते हैं।
शार्प फुट

4
मुझे "undname.exe" मिला है और इसने VC ++ के लिए काम किया है।
रोमन स्टार्कोव

3
यहां अपना नाम पेस्ट करें, और अगर यह एक VC2005 नाम है तो मैं इसे आरेखित करूंगा।
xtofl

कोई ऑनलाइन आवश्यकता: stackoverflow.com/questions/4468770/…
Ciro Santilli 郝海东 over over over

जवाबों:


133

मैंने ऐसा ऑनलाइन सीरिव बनाया है: https://demangler.com

यह एक gcc c ++ सिंबल डीमैंगलर है। आप बस एक स्टैक ट्रेस, या एनएम के आउटपुट को एक टेक्स्ट बॉक्स में कॉपी करते हैं, और यह आउटपुट को ध्वस्त नामों के साथ वापस कर देगा।

@ यूपीडेट: यह अब MSVC और जावा प्रतीकों को भी ध्वस्त करता है।


_ZN9cdnalizer11rewriteHTMLINS_6apache8IteratorEcEET_RKSsRKNS_6ConfigES3_S3_St8functionIFS3_RKS3_SB_EES9_IFvSsEE: मेरे लिए काम किया यह एक नहीं, बल्कि और अधिक लोकप्रिय जवाब में एक
matiu

आपका डेमोंगल इटेनियम के लिए क्वालिफायर को नहीं हटा सकता है। मैं क्लैंग द्वारा उत्पन्न _ZNR4test1fEv को देख रहा हूं।
पिल्ला

धन्यवाद, अच्छी साइट! क्या आप कृपया उत्तर जोड़ सकते हैं white-space: normalया प्रतिक्रिया के समान हो सकता है <pre> टैग (और शायद लाइन नंबर जोड़ सकते हैं)? वर्तमान में लंबी एक-पंक्ति आउटपुट पठनीय नहीं है।
jplatte

1
तुम्हें सावधान रहना चाहिए। अधिकांश वास्तविक दुनिया में डिनांग्लर के कार्यान्वयन भयानक रूप से छोटी गाड़ी और असुरक्षित हैं। वे मूल रूप से केवल नामांकित नामों पर काम करते हैं जो एक ही मंच का उत्पादन करते हैं, लेकिन उच्च इनपुट या सामान्य इनपुट पर मेमोरी त्रुटियों को फ्लैट कर सकते हैं।
केरेक एसबी

8
मैंने इसका नियमित उपयोग किया है। यह नीचे प्रतीत होता है, हालांकि। यह एक बहुत अच्छा, उपयोगी पृष्ठ था
1919

104

यह थोड़ी देर हो सकती है, लेकिन मैंने इस प्रश्न पर आधारित एक बनाया। यह उन इनपुट्स के साथ काम करता है जिन पर मैंने कोशिश की थी, __cxa_demangle और __unDName के माध्यम से g ++ और msvc ++ का समर्थन करता है, जिसे Emscripten के माध्यम से जावास्क्रिप्ट में संकलित किया गया है। आशा है कि यह किसी की मदद करता है: c ++ filtjs

संपादित करें: फिक्स्ड भागने की समस्या


6
बहुत बढ़िया! धन्यवाद! शायद पृष्ठ पर कहीं "ऑनलाइन सी ++ नाम डिमैंगलर" का उल्लेख करें, ताकि लोग आपको Google के माध्यम से ढूंढ सकें?
रोमन स्टार्कोव

1
ठीक है, अब तय किया जाना चाहिए।
nattofriends

3
@ ज़िब्री: एक "छोटा सी स्रोत" ऑनलाइन नहीं है। उसके लिए, मौजूदा c ++ filt और undname उपयोगिताओं का उपयोग करें।
nattofriends

1
@nattofriends: आपका उपकरण कोष्ठक से बच नहीं लगता है, देखें ??_R3?$KxSet@V?$KxSpe@DI@@I@@8
मूइंग डक

2
यह बहुत मददगार होगा अगर आप दूसरों के द्वारा बताए गए टेम्प्लेट के साथ अपनी समस्या को ठीक कर सकते हैं। इससे एसओ पर कम से कम एक गंभीर सवाल पैदा हो गया है।
शफीक यघमौर

24

अधिकांश (यदि सभी नहीं) C ++ कंपाइलर c++filtटूल के साथ आते हैं, जो ठीक वही है जो आप स्पष्ट रूप से खोज रहे हैं।

यदि आप इसे माउस क्लिक पर चाहते हैं ... तो इसके लिए एक GUI लिखें;)


मैं एक माउस क्लिक के साथ विरोध के रूप में न्यूनतम प्रयास के साथ यह चाहता हूं :) ओह ठीक है, मुझे वैसे भी बहुत बार इसकी आवश्यकता नहीं है।
रोमन स्टार्कोव

3
सी ++ फ़ॉल्ट के लिए मेरा सामान्य उपयोग का मामला है objdump -dr ./AClass.o | c++filt | less( nm ./AClass.o | c++filt | less
डिस्सेम्बलर

2
अधिकांश संकलक GCC नहीं हैं। कंपाइलर जो GCC नहीं हैं, वे c ++ फिल्ट को शिप नहीं करते हैं। इंडक्शन द्वारा, अधिकांश कंपाइलर c ++ फिल्ट को शिप नहीं करते हैं।
IInspectable

9

दो कॉपी और पेस्ट ऑनलाइन समाधान हैं:

यदि आपको केवल GCC और Clang के लिए समर्थन की आवश्यकता है, तो आपके पास Coliru का उपयोग करने का विकल्प भी है , जो संभवतः सबसे बहुमुखी ऑनलाइन C ++ कंपाइलर है

यह कट, पेस्ट और क्लिक के रूप में काफी सरल नहीं है - लेकिन बहुत अधिक कठिन नहीं है - और ऐसा लगता है कि टेम्पलेट मापदंडों के साथ कोई समस्या नहीं है जैसा कि ऊपर उल्लेख किया गया था। आपको बस कुछ इस तरह से चलाने के लिए कमांड लाइन को संशोधित करना होगा:

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)
           ^^^^^^^^^^^

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.