BUGPOINT(1) LLVM BUGPOINT(1)

bugpoint - ابزار خودکار کاهش و کوچک‌سازی موارد آزمون

bugpoint [options] [input LLVM ll/bc files] [LLVM passes] --args program arguments

دستور bugpoint منشأ مشکلات در ابزارها و گذرهای (passes) LLVM را محدود و مشخص می‌کند. از این ابزار می‌توان برای اشکال‌زدایی سه نوع خرابی استفاده کرد: کرش‌های بهینه‌ساز، کامپایل‌های نادرست توسط بهینه‌سازها، یا تولید کد بومی معیوب (شامل مشکلات در کامپایلرهای ایستا و JIT). هدف آن کاهش موارد آزمون بزرگ به موارد کوچک و مفید است. برای اطلاعات بیشتر در مورد طراحی و سازوکار درونی bugpoint و همچنین توصیه‌هایی برای استفاده از آن، به مستندات «طراحی و کاربرد ابزار LLVM bugpoint» <> در توزیع LLVM مراجعه کنید.

--additional-so library

بارگذاری شیء اشتراکی پویا (shared object) با نام library در برنامه آزمون هنگام هر بار اجرای آن. این گزینه زمانی مفید است که برنامه‌هایی وابسته به کتابخانه‌های غیر LLVM (مانند کتابخانه‌های X یا curses) را اشکال‌زدایی می‌کنید.

--append-exit-code={true,false}

پیوست کردن کد خروج برنامه آزمون به فایل خروجی، به‌طوری که هرگونه تغییر در کد خروج به منزله شکست آزمون در نظر گرفته شود. مقدار پیش‌فرض false است.

--args program args

ارسال تمام آرگومان‌های مشخص‌شده پس از --args به برنامه آزمون هنگام اجرای آن. توجه داشته باشید که اگر هر یک از program args با «"-"» آغاز شود، باید به این شکل عمل کنید:
bugpoint [bugpoint args] --args -- [program args]

عبارت «"--"» بلافاصله پس از گزینه --args به bugpoint اعلام می‌کند که هر گزینه‌ای را که با «"-"» آغاز می‌شود بخشی از گزینه --args تلقی کند، نه گزینه‌ای برای خود bugpoint.

--tool-args tool args

ارسال تمام آرگومان‌های مشخص‌شده پس از --tool-args به ابزار LLVM تحت آزمون (llc، lli و غیره) در هر بار اجرای آن. باید از این گزینه به شیوه زیر استفاده کنید:
bugpoint [bugpoint args] --tool-args -- [tool args]

عبارت «"--"» بلافاصله پس از گزینه --tool-args به bugpoint اعلام می‌کند که هر گزینه‌ای را که با «"-"» آغاز می‌شود بخشی از گزینه --tool-args تلقی کند، نه گزینه‌ای برای خود bugpoint (به --args در بالا مراجعه کنید).

--safe-tool-args tool args

ارسال تمام آرگومان‌های مشخص‌شده پس از --safe-tool-args به ابزار اجرای «امن» ("safe").

--gcc-tool-args gcc tool args

ارسال تمام آرگومان‌های مشخص‌شده پس از --gcc-tool-args به فراخوانی gcc.

--opt-args opt args

ارسال تمام آرگومان‌های مشخص‌شده پس از --opt-args به فراخوانی opt.

--disable-{dce,simplifycfg}

عدم اجرای گذرهای مشخص‌شده برای پاک‌سازی و کاهش حجم برنامه آزمون. به‌طور پیش‌فرض، bugpoint در هنگام تلاش برای کوچک‌سازی برنامه‌های آزمون این گذرها را به‌صورت داخلی اجرا می‌کند. اگر سعی در یافتن باگ در یکی از این گذرها داشته باشید، ممکن است bugpoint دچار کرش شود.

--enable-valgrind

استفاده از valgrind برای یافتن خطاها در مرحله بهینه‌سازی. این گزینه به bugpoint امکان می‌دهد مشکلاتی را که ناشی از مدیریت نادرست حافظه بوده و در حالت عادی پنهان هستند، شناسایی کند.

-find-bugs

ترتیب گذرهای مشخص‌شده را به‌طور مداوم تصادفی‌سازی کرده و روی برنامه آزمون اجرا می‌کند تا زمانی که باگی پیدا شود یا کاربر اجرای bugpoint را متوقف کند.

-help

چاپ خلاصه‌ای از گزینه‌های خط فرمان.

--input filename

باز کردن filename و بازهدایت ورودی استاندارد برنامه آزمون به این فایل در هنگام اجرا.

--load plugin

بارگذاری شیء پویای plugin در خود bugpoint. این شیء باید گذرهای بهینه‌سازی جدیدی را ثبت کند. پس از بارگذاری، این شیء گزینه‌های خط فرمان جدیدی برای فعال‌سازی بهینه‌سازی‌های گوناگون اضافه خواهد کرد. برای مشاهده فهرست کامل جدید بهینه‌سازی‌ها، گزینه‌های -help و --load را هم‌زمان به کار ببرید؛ برای مثال:
bugpoint --load myNewPass.so -help

--mlimit megabytes

تعیین سقف مصرف حافظه برای بهینه‌سازی و تولید کد. مقدار صفر این محدودیت را غیرفعال می‌کند.

--output filename

هنگامی که برنامه آزمون در جریان خروجی استاندارد خود داده تولید می‌کند، خروجی باید دقیقاً با محتویات filename («خروجی مرجع» یا "reference output") همخوانی داشته باشد. اگر از این گزینه استفاده نکنید، bugpoint با کامپایل برنامه از طریق بک‌اند «امن» ("safe") و اجرای آن، سعی می‌کند یک خروجی مرجع بسازد.

--run-{int,jit,llc,custom}

هنگام کامپایل برنامه آزمون، bugpoint باید با استفاده از مولد کد مشخص‌شده برای آن کد تولید کند. این گزینه‌ها به شما امکان می‌دهند به ترتیب مفسر، کامپایلر JIT، کامپایلر بومی ایستا یا یک دستور سفارشی (به --exec-command مراجعه کنید) را انتخاب نمایید.

--safe-{llc,custom}

هنگام اشکال‌زدایی یک مولد کد، bugpoint باید از مولد کد مشخص‌شده به‌عنوان مولد کد «امن» ("safe") استفاده کند. این مولد کد مطمئن برای ساخت «خروجی مرجع» (در صورت فراهم نشدن آن) و کامپایل بخش‌هایی از برنامه که از مورد آزمون کنار گذاشته می‌شوند به کار می‌رود. این گزینه‌ها به ترتیب امکان انتخاب کامپایلر بومی ایستا یا یک دستور سفارشی (به --exec-command مراجعه کنید) را فراهم می‌آورند. در حال حاضر نمی‌توان از بک‌اندهای مفسر و JIT به‌عنوان بک‌اندهای «امن» استفاده کرد.

--exec-command command

این گزینه دستوری را مشخص می‌کند که باید همراه با گزینه‌های --run-custom و --safe-custom جهت اجرای مورد آزمون بیت‌کد استفاده شود. این قابلیت برای کامپایل متقابل (cross-compilation) مفید است.

--compile-command command

این گزینه دستوری را مشخص می‌کند که باید همراه با گزینه --compile-custom جهت کامپایل مورد آزمون بیت‌کد استفاده شود. این دستور باید در صورتی که فایل «مورد توجه» ("interesting") باشد با یک کد خروج نشان‌دهنده شکست، و در غیر این صورت با کد خروج موفقیت‌آمیز (یعنی 0) خارج شود (مشابه وضعیتی که کامپایلر روی ورودی‌های «مورد توجه» کرش کند).

این گزینه برای آزمودن خروجی کامپایلر بدون اجرای مراحل پیوند (link) یا اجرا کاربرد دارد. برای تولید یک آزمون واحد کاهش‌یافته، می‌توانید دستورالعمل‌های CHECK را به مورد آزمون اضافه کرده و نام اسکریپت اجرایی compile-command را به این شیوه پاس دهید:

#!/bin/sh
llc "$@"
not FileCheck [bugpoint input file].ll < bugpoint-test-program.s

این اسکریپت تا زمانی که FileCheck موفق باشد با شکست ("fail") مواجه می‌شود. در نتیجه خروجی نهایی، کمینه‌ترین بیت‌کدی خواهد بود که FileCheck را با موفقیت می‌گذراند.

--safe-path path

این گزینه مسیر دستوری را مشخص می‌کند که باید همراه با گزینه --safe-{int,jit,llc,custom} اجرا شود.

--verbose-errors={true,false}

رفتار پیش‌فرض bugpoint این است که هنگام یافتن آزمون کاهش‌یافته‌ای که سبب کرش در کامپایل می‌شود، عبارت «"<crash>"» را چاپ می‌کند. این پرچم باعث چاپ خروجی برنامه دچار کرش در stderr می‌شود. این قابلیت برای اطمینان از اینکه خطای در حال ردیابی همان خطای مدنظر است و نه خطای متفاوتی که تصادفاً کامپایلر را دچار کرش کرده، مفید است. مقدار پیش‌فرض false است.

اگر bugpoint در پیدا کردن مشکل موفق شود، با کد 0 خارج می‌شود. در غیر این صورت، چنانچه خطایی رخ دهد، با مقداری غیر صفر پایان می‌یابد.

opt(1) <opt.html>

توسط تیم LLVM نگهداری می‌شود (https://llvm.org).

2003-2026, LLVM Project

2026-07-15 22