C++FILT(1)

الاسم
c++filt - فك رموز رموز C++ وجافا

موجز
c++filt [-_|--strip-underscore]
        [-n|--no-strip-underscore]
        [-p|--no-params]
        [-t|--types]
        [-i|--no-verbose]
        [-r|--no-recurse-limit]
        [-R|--recurse-limit]
        [-s format|--format=format]
        [--help] [--version] [symbol...]

الوصف
توفر لغتا C++ وجافا تحميل الدوال، مما يعني أنه يمكنك كتابة دوال كثيرة بنفس الاسم، بشرط أن تأخذ كل دالة معاملات من أنواع مختلفة. للتمييز بين هذه الدوال المتشابهة الأسماء، تقوم C++ وجافا بترميزها إلى اسم مجمع منخفض المستوى يحدد كل نسخة مختلفة بشكل فريد. تُعرف هذه العملية باسم الترميز. يقوم برنامج c++filt [1] بالتعيين العكسي: فهو يفك (يفك الترميز) الأسماء منخفضة المستوى إلى أسماء على مستوى المستخدم لتكون قابلة للقراءة.

كل كلمة أبجدية رقمية (تتكون من حروف أو أرقام أو شرطات سفلية أو علامات دولار أو نقاط) تظهر في الإدخال هي اسم مشفر محتمل. إذا فك الاسم إلى اسم C++، يحل اسم C++ محل الاسم منخفض المستوى في المخرجات، وإلا يُخرج الكلمة الأصلية. بهذه الطريقة يمكنك تمرير ملف مصدر مجمع كامل، يحتوي على أسماء مشفرة، عبر c++filt ورؤية نفس الملف المصدر الذي يحتوي على أسماء مفكوكة الترميز.

يمكنك أيضًا استخدام c++filt لفك رموز فردية بتمريرها في سطر الأوامر:

        c++filt <symbol>

إذا لم تُعطَ أي وسائط symbol، يقرأ c++filt أسماء الرموز من الإدخال القياسي بدلاً من ذلك. تُطبع جميع النتائج على المخرجات القياسية. الفرق بين قراءة الأسماء من سطر الأوامر مقابل قراءة الأسماء من الإدخال القياسي هو أن وسائط سطر الأوامر يُتوقع أن تكون مجرد أسماء مشفرة ولا يُجرى أي فحص لفصلها عن النص المحيط. وهكذا على سبيل المثال:

        c++filt -n _Z1fv

سينجح ويفك الاسم إلى "f()" بينما:

        c++filt -n _Z1fv,

لن ينجح. (لاحظ الفاصلة الإضافية في نهاية الاسم المشفر التي تجعله غير صالح). لكن هذا الأمر سينجح:

        echo _Z1fv, | c++filt -n

وسيعرض "f(),"، أي الاسم المفكوك الترميز متبوعًا بفاصلة لاحقة. هذا السلوك لأنه عندما تُقرأ الأسماء من الإدخال القياسي يُتوقع أنها قد تكون جزءًا من ملف مصدر مجمع حيث قد تكون هناك أحرف إضافية غريبة تتبع الاسم المشفر. على سبيل المثال:

            .type   _Z1fv, @function

الخيارات

-_
--strip-underscore
    في بعض الأنظمة، يضع كل من مصرفي C وC++ شرطة سفلية أمام كل اسم. على سبيل المثال، اسم C "foo" يحصل على الاسم منخفض المستوى "_foo". يزيل هذا الخيار الشرطة السفلية الأولية. ما إذا كان c++filt يزيل الشرطة السفلية افتراضيًا يعتمد على الهدف.

-n
--no-strip-underscore
    لا تُزل الشرطة السفلية الأولية.

-p
--no-params
    عند فك تشفير اسم دالة، لا تعرض أنواع معاملات الدالة.

-t
--types
    حاول فك تشفير الأنواع بالإضافة إلى أسماء الدوال. هذا معطل مبدئيًا لأن الأنواع المشفرة تُستخدم عادةً داخليًا فقط في المترجم، وقد تُخلط مع أسماء غير مشفرة. على سبيل المثال، دالة تُدعى "a" تُعالج كاسم نوع مشفر سيُفك تشفيرها إلى "signed char".

-i
--no-verbose
    لا تُضمّن تفاصيل التنفيذ (إن وجدت) في المخرجات المفكوك تشفيرها.

-r
-R
--recurse-limit
--no-recurse-limit
--recursion-limit
--no-recursion-limit
    يمكن أو يعطل حداً لمقدار التكرار المنفذ أثناء فك تشويه السلاسل النصية. بما أن تنسيقات تشويه الأسماء تسمح بمستوى غير محدود من التكرار، فمن الممكن إنشاء سلاسل سيؤدي فك تشفيرها إلى استنفاد مساحة المكدس المتاحة على الجهاز المضيف، مما يتسبب في خطأ في الذاكرة. يحاول هذا الحد منع حدوث ذلك عن طريق تقييد التكرار بـ 2048 مستوى من التداخل.

    المبدئي هو تفعيل هذا الحد، لكن تعطيله قد يكون ضروريًا من أجل حل (demangle) الأسماء المعقدة حقًا. لاحظ مع ذلك أنه إذا عُطل حد العودية، فإن استنفاد المكدس وارد وأي تقارير عن أخطاء بشأن مثل هذا الحدث ستُرفض.

    الخيار -r هو مرادف للخيار --no-recurse-limit. الخيار -R هو مرادف للخيار --recurse-limit.

-s format
--format=التنسيق
    c++filt يمكنه فك تشفير طرق تشفير متنوعة، تُستخدم بواسطة مترجمات مختلفة. وسيطة هذا الخيار تختار الطريقة التي يستخدمها:

    "auto"
        اختيار آلي بناءً على الملف التنفيذي (الطريقة المبدئية)

    "gnu"
        الطريقة المستخدمة بواسطة مترجم GNU C++ (g++)

    "lucid"
        الطريقة المستخدمة بواسطة مترجم Lucid (lcc)

    "arm"
        الطريقة المحددة بواسطة دليل المرجع المشروح لـ C++

    "hp"
        الطريقة المستخدمة بواسطة مترجم HP (aCC)

    "edg"
        الطريقة المستخدمة بواسطة مترجم EDG

    "gnu-v3"
        الطريقة المستخدمة بواسطة مترجم GNU C++ (g++) مع واجهة ABI V3.

    "java"
        الطريقة المستخدمة بواسطة مترجم GNU Java (gcj)

    "gnat"
        المُستخدَم من قبل مترجم GNU Ada (GNAT).

--help
    اطبع ملخص الخيارات لـ c++filt واخرج.

--version
    اطبع رقم إصدار c++filt واخرج.

@الملف
    اقرأ خيارات سطر الأوامر من file. تُدرج الخيارات المقروءة مكان خيار @file الأصلي. إذا كان file غير موجود، أو لا يمكن قراءته، فسيُعامل الخيار حرفيًا ولن يُزال.

    تُفصل الخيارات في file بمسافات فارغة. يمكن تضمين حرف مسافة فارغة في خيار ما عن طريق إحاطة الخيار بالكامل إما بعلامات اقتباس مفردة أو مزدوجة. يمكن تضمين أي حرف (بما في ذلك الشرطة المائلة العكسية) عن طريق سبق الحرف المراد تضمينه بشرطة مائلة عكسية. يمكن لـ file نفسه أن يحتوي على خيارات @file إضافية؛ وتُعالج أي خيارات من هذا القبيل بشكل متكرر (recursively).

الحواشي

1.  لا يسمح MS-DOS بأحرف "+" في أسماء الملفات، لذا يُسمى هذا البرنامج على MS-DOS باسم CXXFILT.

انظر أيضًا
مدخلات Info الخاصة بـ binutils.

حقوق النسخ
حقوق الطبع والنشر (c) لعام 1991-2026 لمؤسسة البرمجيات الحرة، المحدودة.

يُمنح الإذن بنسخ وتوزيع و/أو تعديل هذا المستند بموجب شروط رخصة جنو للوثائق الحرة (GNU Free Documentation License)، الإصدار 1.3 أو أي إصدار لاحق تنشره مؤسسة البرمجيات الحرة؛ مع عدم وجود أقسام ثابتة، وبدون نصوص غلاف أمامي، وبدون نصوص غلاف خلفي. نُسخة من الرخصة مضمنة في القسم المعنون "GNU Free Documentation License".

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.