سؤال

لقد كنت أحاول مؤخرًا إنشاء اختبارات وحدات لبعض التعليمات البرمجية القديمة.

لقد اتخذت نهج استخدام الرابط لأظهر لي وظائف تسبب أخطاء الارتباط ، وأخذ المصدر للعثور على التعريف وإنشاء كعب من ذلك.

هل توجد طريقة أسهل؟ هل هناك نوع من محلل C ++ الذي يمكن أن يعطيني تعريفات الفصل ، في شكل سهل الاستخدام ، والذي يمكنني من خلاله إنشاء كعبان؟

هل كانت مفيدة؟

المحلول

قد ترغب في التحقيق http://os.inf.tu-dresden.de/vfiasco/Relex.html#parsing. لكن تحليل C ++ صعب.

من ناحية أخرى ، ربما CTAGs أو شيء مشابه يمكن أن يستخرج تعريفات الفئة ...

قد تحاول أيضًا كتابة محلل خاص بك (؟) لإنشاء كعب دراسي من ملفات الرأس ...

حاولت أن أعطيك بعض المؤشرات. كما ترى ، المشكلة ليست سهلة. ولكن نأمل أن تتمكن من أتمتة ما على الأقل جزء منه.

نصائح أخرى

GCC XML يستخدم في بعض المشاريع ، مثل FFI التلقائي لـ LISP المشترك.يرتبط في برنامج التحويل البرمجي G ++ لإنشاء XML يمثل المصدر. من هناك ، يمكن أن تساعدك أي أداة معالجة XML في الوصول إلى هدفك.

ال ABI-COMPLIANCE CEECKER يمكن استخدام الأداة كحوض ملفات رأس C/C ++:

abi-compliance-checker -lib NAME -dump VER.xml -headers-only -xml -stdout > api.xml

VER.xml ملف الإدخال هو ما يلي:

<version>
  1.0
</version>

<headers>
  /path1/to/header(s)/
  /path2/to/header(s)/
   ...
</headers>

الإخراج api.xml يحتوي الملف على توقيعات الوظائف والمعلومات الأخرى من ملفات الرأس في النموذج المنظم:

...
<symbol>
    <id>37348</id>
    <mangled>_ZN7MWidget11qt_metacallEN11QMetaObject4CallEiPPv</mangled>
    <short>qt_metacall</short>
    <class>13749</class>
    <header>mwidget.h</header>
    <line>45</line>
    <return>44</return>
    <spec>virtual</spec>
    <parameters>
        <param>
            <name>p1</name>
            <type>4078</type>
            <algn>4</algn>
            <pos>0</pos>
        </param>
        <param>
            <name>p2</name>
            <type>44</type>
            <algn>4</algn>
            <pos>1</pos>
        </param>
        <param>
            <name>p3</name>
            <type>3905</type>
            <algn>8</algn>
            <pos>2</pos>
        </param>
    </parameters>
</symbol>
...

انظر أيضا معلومات عن API-sanity-checker أداة ، يمكنها إنشاء حالات اختبار الوحدة الأساسية لكل وظيفة في واجهة برمجة التطبيقات من خلال تحليل الإعلانات في ملفات الرأس.

http://clang.llvm.org/ تبدو واعدة ولكنها غير مكتملة.

http://www.boost.org/doc/libs/1_36_0/libs/python/pyste/index.html يستخدم GCCXML لإنشاء أغلفة لرمز C ++ لتواصل Python. هذا يثبت أنه تم استخدام GCCXML لمفهوم مماثل.

إذا كنت على Aplatform تستخدم تنسيق تصحيح الأخطاء القزم (معظمها UNIX) ، فيمكنك استخدام Libdwarf لتحليل معلومات تصحيح الأخطاء واستخراج المعلومات حول كل شيء (النماذج الأولية للوظيفة ، تعريفات الفئة ، إلخ). أكثر تنظيما وأسهل لتحليله من C ++.

يمكن للدوكسين عادة تحليل ما يكفي من C ++ لإنشاء وثائق للرمز. كما أن لديها خيار إخراج XML.

هل نظرت إلى Mockcpp, ممسحة و موكب ؟ يمكنك أن ترى كيف أنها تخلق C ++ - إذا لم يناسب أي منها احتياجاتك.

يوفر مشروع Eclipse CDT محللًا متقدمًا C ++. الواجهة سهلة للغاية. يمكن أن يعطي مقتطف الكود التالي تلميحًا كافيًا.

itranslationUnit tu = coremodelutil.findTransLationUnit (file) ؛
icelement [] عناصر = tu.getChildren () ؛

هيكل البنية = (البنية) العنصر ؛
ImethodDeclaration [] Methods = prothers.getMethods () ؛
ifield [] field = itture.getFields () ؛

إذا كنت على نظام Windows ، فقد ترغب في إلقاء نظرة على مشروع Microsoft Phoenix. إنه إطار عمل جديد يتيح لك ربط أي مرحلة من مرحلة عملية التجميع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top