| SPLINT(1) | Release 3.1.2a | SPLINT(1) |
نام (NAME)
splint - ابزاری برای بررسی ایستای برنامههای C
خلاصه دستور (SYNOPSIS)
splint [گزینهها]
توضیحات (DESCRIPTION)
splint ابزاری برای بررسی ایستای برنامههای C جهت یافتن آسیبپذیریهای امنیتی و اشتباهات رایج برنامهنویسی است. با کمترین تلاش، splint میتواند به عنوان یک lint(1) بهتر مورد استفاده قرار گیرد. اگر تلاش بیشتری برای افزودن حاشیهنویسیها (annotations) به برنامهها صرف شود، splint میتواند بررسیهای قویتری نسبت به آنچه توسط هر lint استانداردی انجام میشود، به عمل آورد. برای مستندات کامل، لطفاً پیوند http://www.splint.org را ببینید. این صفحهٔ راهنما تنها بخش کوچکی از گزینههای موجود را پوشش میدهد.
گزینهها (OPTIONS)
- -help
- نمایش راهنما.
مقداردهی اولیه (Initialization)
این پرچمها دایرکتوریها و فایلهای مورد استفاده توسط splint را کنترل میکنند. میتوان از آنها در خط فرمان یا در یک فایل گزینهها استفاده کرد، اما نمیتوان از آنها به عنوان کامنتهای کنترلی در کد منبع استفاده نمود. بهجز مواردی که ذکر شده است، این پرچمها با قرار گرفتن - یا + در ابتدای آنها معنای یکسانی دارند.
- -tmpdir directory
- تنظیم دایرکتوری برای نوشتن فایلهای موقت. مقدار پیشفرض /tmp/ است.
- -I directory
- افزودن دایرکتوری به مسیر جستجوی فایلهای include در C. توجه داشته باشید که برای سازگاری با پرچمهای پیشپردازندهٔ C، هیچ فاصلهای پس از I قرار نمیگیرد.
- -S directory
- افزودن دایرکتوری به مسیر جستجوی فایلهای مشخصات .lcl.
- -f file
- بارگذاری فایل گزینههای <file>. اگر از این پرچم در خط فرمان استفاده شود، فایل پیشفرض ~/.splintrc بارگذاری نمیشود. این پرچم میتواند در یک فایل گزینهها برای بارگذاری یک فایل گزینههای دیگر استفاده شود.
- -nof
- از بارگذاری فایلهای گزینههای پیشفرض (./.splintrc و ~/.splintrc) جلوگیری میکند. (تنظیم -nof بر +nof ارجحیت دارد و باعث میشود فایلهای گزینهها به صورت عادی بارگذاری شوند.)
- -system-dirs directories
- تنظیم دایرکتوریها برای فایلهای سیستمی (پیشفرض "/usr/include" است). دایرکتوریها را با دونقطه از هم جدا کنید (مانند "/usr/include:/usr/local/lib"). تنظیمات پرچم به فایلهای موجود در دایرکتوریهای سیستمی سرایت میکند. اگر -system-dir-errors تنظیم شده باشد، هیچ خطایی برای فایلهای موجود در دایرکتوریهای سیستمی گزارش نمیشود.
پیشپردازنده (Pre-processor)
این پرچمها برای تعریف یا لغو تعریف ثوابت پیشپردازنده استفاده میشوند. پرچم -I<directory> نیز به پیشپردازندهٔ C فرستاده میشود.
- -D initializer
- به پیشپردازندهٔ C فرستاده میشود.
- -U initializer
- به پیشپردازندهٔ C فرستاده میشود.
کتابخانهها (Libraries) این پرچمها ایجاد و استفاده از کتابخانهها را کنترل میکنند.
- -dump file
- ذخیرهٔ وضعیت در <file> برای بارگذاری. در صورتی که <file> پسوندی نداشته باشد، پسوند پیشفرض .lcd اضافه میشود.
- -load file
- بارگذاری
وضعیت از <file>
(ایجادشده
توسط -dump). در
صورتی که <file>
پسوندی
نداشته
باشد،
پسوند
پیشفرض .lcd
اضافه
میشود.
تنها یک
فایل
کتابخانه
را میتوان
بارگذاری
کرد.
بهطور پیشفرض، اگر از پرچم -load برای بارگذاری یک کتابخانهٔ کاربری استفاده نشود، کتابخانهٔ استاندارد بارگذاری میشود. اگر هیچ کتابخانهٔ کاربریای بارگذاری نشده باشد، میتوان از یکی از پرچمهای زیر برای انتخاب یک کتابخانهٔ استاندارد دیگر استفاده کرد. برای بارگذاری کتابخانهٔ شرحدادهشده، پیش از پرچم از + استفاده کنید (یا با استفاده از nolib از بارگذاری یک کتابخانه جلوگیری نمایید). برای اطلاعات در مورد کتابخانههای ارائهشده، پیوست F را ببینید.
- -nolib
- هیچ کتابخانهای بارگذاری نشود. این گزینه از بارگذاری کتابخانهٔ استاندارد جلوگیری میکند.
- -standard-lib
- استفاده از کتابخانهٔ استاندارد (ISO C99) (بهطور پیشفرض انتخاب شده است).
- -standard-strict-lib
- استفاده از نسخهٔ سختگیرانهٔ (strict) کتابخانهٔ استاندارد (ISO C99).
- -posix-lib
- استفاده از کتابخانهٔ استاندارد POSIX.
- -posix-strict-lib
- استفاده از نسخهٔ سختگیرانهٔ کتابخانهٔ استاندارد POSIX.
- -unix-lib
- استفاده از نسخهٔ UNIX کتابخانهٔ استاندارد.
- -unix-strict-lib
- استفاده از نسخهٔ سختگیرانهٔ کتابخانهٔ استاندارد UNIX.
خروجی (Output)
این پرچمها کنترل میکنند چه اطلاعات اضافیای توسط splint چاپ شود. تنظیم +<flag> باعث میشود اطلاعات شرحدادهشده چاپ شوند؛ تنظیم -<flag> از چاپ آن جلوگیری میکند. بهطور پیشفرض، همهٔ این پرچمها غیرفعال هستند.
- -use-stderr
- ارسال پیامهای خطا به خطای استاندارد (به جای خروجی استاندارد).
- -show-summary
- نمایش خلاصهای از تمام خطاهای گزارششده و فرونشاندهشده (suppressed). شمارش خطاهای فرونشاندهشده لزوماً دقیق نیست؛ زیرا خاموش کردن یک پرچم ممکن است برای صرفهجویی در محاسبات از انجام برخی بررسیها جلوگیری کند، و خطاهایی که گزارش نمیشوند ممکن است نسبت به زمان گزارش شدن به شکل متفاوتی سرایت کنند.
- -show-scan
- نمایش نام فایلها هنگام پردازش آنها.
- -show-alluses
- نمایش فهرست استفاده از تمامی شناسههای خارجی مرتبشده بر اساس تعداد استفاده.
- -stats
- نمایش تعداد خطوط پردازششده و زمان بررسی.
- -time-dist
- نمایش نحوهٔ توزیع و صرف زمان بررسی.
- -quiet
- فرونشاندن اعلان آغازین (herald) و شمارش خطاها. (اگر quiet تنظیم نشده باشد، splint پیش از شروع بررسی یک پیام آغازین با اطلاعات نسخه، و خطی شامل خلاصهٔ تعداد کل خطاهای گزارششده چاپ میکند.)
- -which-lib
- چاپ نام فایل کتابخانهٔ استاندارد و اطلاعات ایجاد آن.
- -limit number
- حداکثر <number> خطای مشابه به صورت پیاپی گزارش میشود. خطاهای بیشتر فرونشانده میشوند و پیامی حاوی تعداد پیامهای فرونشاندهشده چاپ میشود.
خطاهای مورد انتظار (Expected Errors)
بهطور معمول، splint انتظار دارد هیچ خطایی گزارش نشود. در صورتی که هیچ خطایی گزارش نشود، وضعیت خروج موفقیتآمیز (0) و در صورت گزارش هرگونه خطا، شکست خواهد بود. میتوان از پرچمها برای تنظیم تعداد خطاهای مورد انتظار گزارششده استفاده کرد. به دلیل سازوکارهای ارائهشده برای فرونشانی خطا، این گزینهها احتمالاً نباید برای بررسی نهایی برنامههای واقعی استفاده شوند، اما ممکن است در توسعهٔ برنامهها با استفاده از make مفید باشند.
- -expect number
- دقیقاً <number> خطای کد مورد انتظار است. splint با وضعیت خروج شکست خاتمه مییابد مگر اینکه دقیقاً <number> خطای کد شناسایی شود.
- قالب پیام (-Message Format)
- این پرچمها نحوهٔ چاپ پیامها را کنترل میکنند. میتوان آنها را در خط فرمان، در فایلهای گزینهها یا به صورت محلی در کامنتهای نحوی تنظیم کرد. پرچمهای linelen و limit میتوانند با + یا - با معنای یکسان به کار روند؛ برای سایر پرچمها، + چاپ توصیفشده را فعال و - آن را غیرفعال میکند. کادر سمت چپ هر پرچم مقدار پیشفرض آن را نشان میدهد.
- -show-column
- نمایش شماره ستونی که خطا در آن یافت شده است. پیشفرض: +
- -show-func
- نمایش نام تابع (یا تعریف ماکرو) شامل خطا. نام تابع یک بار پیش از اولین پیام شناساییشده در آن تابع چاپ میشود. پیشفرض: +
- -show-all-conjs
- نمایش تمام انواع جایگزین ممکن (بخش 8.2.2 را ببینید). پیشفرض: -
- -paren-file-format
- استفاده از قالب file(line) در پیامها.
- -hints
- ارائهٔ نکات راهنما (hints) در شرح خطا و نحوهٔ فرونشاندن پیام برای اولین خطای گزارششده در هر ردهٔ خطا. پیشفرض: +
- -force-hints
- ارائهٔ نکات راهنما برای تمام خطاهای گزارششده، حتی اگر نکته قبلاً برای همان ردهٔ خطا نمایش داده شده باشد. پیشفرض: -
- -linelen number
- تنظیم حداکثر طول خط پیام روی <number> نویسه. splint پیامهای طولانیتر از <number> نویسه را به چندین خط میشکند. پیشفرض: 80
پرچمهای انتخاب حالت (Mode Selector Flags)
پرچمهای انتخاب حالت، پرچمهای بررسی حالت را روی مقادیر از پیش تعریفشده تنظیم میکنند. آنها روشی سریع و درشتدانه برای کنترل ردههای خطاهای گزارششده فراهم میآورند. میتوان پرچمهای بررسی خاص را پس از یک پرچم حالت تنظیم کرد تا تنظیمات حالت لغو (override) شوند. پرچمهای حالت میتوانند به صورت محلی نیز استفاده شوند، با این حال تنظیمات حالت بر تنظیمات خاص پرچمهای خط فرمان ارجحیت خواهند داشت. اگر یک پرچم حالت پس از تنظیم شدن یک پرچم بررسی حالت استفاده شود، هشداری صادر میشود.
اینها توصیفهای کوتاهی برای ارائهٔ یک دید کلی از عملکرد هر حالت هستند. برای مشاهدهٔ تنظیمات کامل پرچم در هر حالت، از دستور splint -help modes استفاده کنید. پرچم حالت چه با + و چه با - استفاده شود اثر یکسانی دارد.
- -weak
- بررسی ضعیف (weak)، مناسب برای کدهای معمولی C بدون حاشیهنویسی. هیچگونه بررسی اصلاحی (modifies checking)، بررسی ماکرو، آشکارسازی بازنمود (rep exposure) یا بررسی رابط تمیز (clean interface) انجام نمیشود. مقادیر بازگشتی از نوع int ممکن است نادیده گرفته شوند. انواع دادهٔ bool، int، char و انواع enum تعریفشده توسط کاربر همگی معادل هستند. اعلانهای سبک قدیمی گزارش نمیشوند.
- -standard
- حالت پیشفرض. تمام بررسیهای انجامشده توسط weak، به علاوهٔ بررسی اصلاحات، بررسی نام مستعار سراسری (global alias checking)، استفاده از تمام پارامترها، استفاده از فضای آزادشده، مقادیر بازگشتی نادیدهگرفتهشده از هر نوع، بررسی ماکرو، کد غیرقابلدسترس، حلقههای بینهایت و موارد عبور بدون توقف (fall-through). انواع دادهٔ bool، int و char متمایز هستند. اعلانهای سبک قدیمی گزارش میشوند.
- -checks
- بررسی نسبتاً سختگیرانه. تمام بررسیهای انجامشده توسط standard، به علاوهٔ بررسی اصلاحات الزامی (must modification checking)، آشکارسازی بازنمود (rep exposure)، نامهای مستعار بازگشتی (return alias)، مدیریت حافظه و رابطهای کامل.
- -strict
- بررسی بسیار سختگیرانه و وسواسگونه. تمام بررسیهای انجامشده توسط checks، به علاوهٔ اصلاحات و متغیرهای سراسری استفادهشده در توابع مشخصنشده، کتابخانهٔ استاندارد سختگیرانه، و نوعبندی دقیق و سختگیرانهٔ عملگرهای C. جایزهٔ ویژهای به اولین فردی اعطا خواهد شد که یک برنامهٔ واقعی تولید کند که در بررسی strict هیچ خطایی نداشته باشد.
نویسندگان (AUTHORS)
اگر نیاز به برقراری ارتباط با نویسندگان دارید، به نشانی زیر ایمیل بفرستید: mailto:info@splint.org یا از تارنمای زیر بازدید کنید: http://www.splint.org
همچنین ببینید (SEE ALSO)
lint(1)
| 02/27/2017 | Release 3.1.2a |