إذا كنت مهتمًا ، تحقق من إعادة التنفيذ الجديدة (جدًا جدًا) هنا!
إذا كنت ترغب في تثبيت SYS محليًا:
--shared . راجع وظائف build() و package() في هذا الملف كمثال على كيفية تثبيت Boolector بعد استنساخه. على Arch Linux ، يمكنك فقط تثبيت boolector-git من Aur.بدلاً من ذلك ، يمكنك استخدام Dockerfile من Ralf-Philipp Weinmann.
بمجرد تثبيت جميع التبعيات ، يجب أن تكون قادرًا على إنشاء الأداة فقط:
stack build
بمجرد قيامك ببناء الأداة ، يمكنك إنشاء وتشغيل اختباراتنا مع:
stack test
سيؤدي ذلك إلى تشغيل نسخة كاملة أو أقل من جناح الاختبار الخاص بنا ، إلى جانب اختبارات الانحدار لكل خطأ ندرجه في الورقة. يستغرق الجناح ما يزيد قليلاً عن دقيقتين على الكمبيوتر المحمول مع 64 جيجابايت من ذاكرة الوصول العشوائي و 8 خيوط. يجب أن تمر جميع الاختبارات باستثناء واحد --- خطأ الذي نواجه فيه مشكلة في تعقب ---. إذا فشل أي شيء آخر ، فحاول إعادة تشغيل الاختبارات ؛ ربما يكون المحلل قد توقيت (لم يحدث هذا على أجهزتنا ، ولكن نظرًا لأننا لا نستطيع أن نقدم لك تسجيل دخول لإسماعه ، فمن المحتمل أن يحدث على جهازك).
إذا كنت ترغب فقط في إعادة إنتاج نتائج الورق ولا شيء غير ذلك ، فتشرك:
stack test --ta '-p End-to-end'
بمجرد إنشاء الأداة ، يمكنك الآن استخدامها للعثور على الأخطاء!
stack exec sys
تأخذ الأداة عدة خيارات:
-d DIR --libdir=DIR directory (or file) to analyze
-e EXTN --extn=EXTN file extension
-c CHECK --check=CHECK checker to run
-d لتحديد الدليل (يحتوي على ملفات LLVM) أو ملف LLVM واحد.-e لتحديد امتداد الملفات للتحقق. يكون هذا مفيدًا عند بناء مشروعك بمستويات تحسينات مختلفة (على سبيل المثال ، .ll-O0 لبناء التصحيح مع -O0 و .ll-O0_p للإنتاج).ll يطابق كل ملفات *.llO0 يطابق جميع ملفات *.ll-O0 و *.ll-O0_pO1 يطابق جميع ملفات *.ll-O1 و *.ll-O1_pO2 يطابق جميع ملفات *.ll-O2 و *.ll-O2_pO3 يطابق جميع ملفات *.ll-O3 و *.ll-O3_pOg جميع ملفات *.ll-Og و *.ll-Og_pOs يطابق جميع ملفات *.ll-Os و *.ll-Os_pOz يطابق جميع ملفات *.ll-Oz و *.ll-Os_zprod يطابق جميع ملفات *_pany تطابق جميع الملفات-c لتحديد المدقق الذي يجب تشغيله ، أحد:uninit : مدقق ذاكرة غير مهتمheapoob : malloc oob checkerconcroob : فهرس سلبي OOB CHECKERuserinput : مدقق إدخال المستخدم للعثور على خطأ الوصول إلى الذاكرة غير الملموسة التي وجدت أدائنا في مكتبة Prio Firefox:
$ stack exec sys -- -c uninit -e prod -d ./test/Bugs/Uninit/Firefox/serial.ll-O2_p
الأداة أعلام اثنين من الأخطاء. دعونا نلقي نظرة على الأول:
Stack uninit bug
Name "serial_read_mp_array_73"
in
Name "serial_read_mp_array"
path-to-file
[UnName 4,UnName 71]
إذا قمت بفحص وظيفة Serial_Read_MP_Array () ، فإن مسار كتلة BUGGY هو %4 (الكتلة الأولى) إلى %71 ، حيث نستخدم [ %73 ].
لم نختبر (ومن المحتمل ألا يختبرنا) SYS على أي شيء سوى قوس Linux. يسعدنا دمج التصحيحات التي تضيف دعمًا لأنظمة أنظمة أخرى وإنشاء أنظمة أخرى!
├── app -- Executable used to run the checkers
├── src
│ ├── Checkers -- Static and symbolic checkers
│ ├── Control -- Logging helpers
│ ├── LLVMAST -- LLVM AST interface
│ ├── InternalIR -- Internal IR used to represent paths for both static and symex
│ ├── Static -- Static checker DSL
│ └── Symex -- Symbolic DSL and execution engine
├── community -- Community files
└── test -- Tests