هل يوجد اسم عبر الإنترنت Demangler لـ C ++؟ [مغلق
سؤال
أحصل على خطأ طويل إلى حد ما ومربك ، وسأحبه إذا كان بإمكاني لصقها في مربع نص على بعض موقع الويب ولدي أسماء غير متجانسة بالنسبة لي.
لا أحد يعرف مثل هذه الخدمة؟
المحلول
لقد أنشأت مثل هذا الملمسي عبر الإنترنت: http://demangler.com
هذا هو رمز GCC C ++ Demangler. يمكنك فقط نسخ تتبع المكدس ، أو إخراج NM في مربع نص ، وسوف يعيد الإخراج مع الأسماء.
@update: إنه الآن يفسد رموز MSVC و Java أيضًا.
نصائح أخرى
قد يكون هذا متأخراً بعض الشيء ، لكنني أنشأت واحدة ، بناءً على هذا السؤال. إنه يعمل مع المدخلات التي جربتها ، ويدعم G ++ و MSVC ++ عبر __cxa_demangle و __undname ، تم تجميعها إلى javaScript عبر emscripten. أمل أن هذا يساعد شخصاما: C ++ filtjs
تحرير: مشكلة هروب ثابتة
معظم المترجمين (إن لم يكن كل) يأتي معهم c++filt
الأداة التي تفعل بالضبط ما تبحث عنه على ما يبدو.
إذا كنت تريد ذلك عند الماوس انقر ... حسنًا ، اكتب واجهة المستخدم الرسومية من أجله ؛)
هناك حلول على الإنترنت للنسخ واللصق:
- demangler.com, ، الذي يدعم رموز مجلس التعاون الخليجي أو المرئي أو جافا
- C ++ filtjs, ، الذي يدعم GCC و Visual Studio لكن لديه مشاكل مع معلمات القالب
إذا كنت بحاجة فقط إلى دعم GCC و Clang ، فلديك أيضًا خيار الاستخدام كولرو, ، وهو الأكثر تنوعا برنامج التحويل البرمجي 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)
^^^^^^^^^^^
لمعلوماتك ، هناك أيضًا جوهرة روبي لتشكيل Borland/MS/مهما كانت الأسماء المشوهة: Unmangler