illinkanalyzer(1) General Commands Manual illinkanalyzer(1) نام (NAME) illinkanalyzer - تحلیل‌گر وابستگی‌ها و بهینه‌ساز اسمبلی‌های باینری IL در Mono خلاصه دستور (SYNOPSIS) illinkanalyzer [گزینه‌ها] توضیحات (DESCRIPTION) ابزار تحلیل‌گر لینکر (linker analyzer) یک ابزار خط فرمان برای تحلیل وابستگی‌هایی است که هنگام پردازش توسط لینکر ثبت شده‌اند؛ فرآیندی که در آن لینکر آیتم‌هایی را نشانه‌گذاری می‌کند تا در اسمبلی پیوندخورده نهایی باقی بمانند. این ابزار بر روی یک گراف جهت‌دار از وابستگی‌ها کار می‌کند که در حین اجرای لینکر جمع‌آوری و استخراج (Dump) شده‌اند. رأس‌های این گراف آیتم‌های مورد نظر مانند اسمبلی‌ها، نوع‌ها، متدها، فیلدها، مراحل لینکر و غیره هستند. یال‌ها نیز نشان‌دهنده وابستگی‌ها میان این موارد می‌باشند. نحوه استخراج وابستگی‌ها (HOW TO DUMP DEPENDENCIES) تحلیل‌گر لینکر به عنوان ورودی به یک پرونده وابستگی‌های لینکر نیاز دارد. این پرونده را می‌توان با فعال‌سازی استخراج وابستگی‌ها حین پیوند زدن یک پروژه Xamarin.Android یا Xamarin.iOS به دست آورد. این کار را می‌توان از طریق خط فرمان با تنظیم ویژگی LinkerDumpDependencies روی مقدار true و سپس بیلد پروژه انجام داد. (اطمینان حاصل کنید که تسک LinkAssemblies فراخوانی شود؛ گاهی اوقات ممکن است نیاز به پاک‌سازی و Clean کردن پروژه باشد). معمولاً بیلد پروژه به شکل زیر کافی است: rm -f obj/Release/link.flag msbuild /p:LinkerDumpDependencies=true /p:Configuration=Release YourAppProject.csproj پس از یک بیلد موفق، یک پرونده به نام linker-dependencies.xml.gz ایجاد می‌شود که شامل اطلاعات مورد نیاز برای تحلیل‌گر است. گزینه‌ها (OPTIONS) -a, --alldeps نمایش تمام وابستگی‌ها. --csvoutput=VALUE خروجی نوع‌ها و در صورت تمایل تحلیل اندازه در پرونده CSV. -h, --help نمایش این پیام راهنما و خروج. -l, --linkedpath=VALUE تنظیم مسیر دایرکتوری اسمبلی‌های پیوندخورده (لینک‌شده). امکان نمایش تخمین اندازه را فعال می‌کند. -r, --rawdeps=VALUE نمایش وابستگی‌های خام رأس (گره). مقدار خام رأس در همان قالبی است که لینکر در پرونده XML وابستگی ثبت کرده است. مقدار می‌تواند یک عبارت باقاعده (Regex) باشد. --roots نمایش وابستگی‌های ریشه. --stat نمایش آمار وابستگی‌های بارگذاری‌شده. --tree کاهش و تبدیل گراف وابستگی به یک درخت. --types نمایش وابستگی‌های تمام نوع‌ها. -t, --typedeps=VALUE نمایش وابستگی‌های نوع. مقدار می‌تواند یک عبارت باقاعده (Regex) باشد. -f, --flat نمایش تمام وابستگی‌ها به ازای هر رأس به همراه فاصله آن‌ها. -v, --verbose نمایش با جزئیات بیشتر. گزینه‌های --stat و --roots را نیز فعال می‌کند. مثال‌ها (EXAMPLES) فرض کنید می‌خواهید بدانید چرا یک نوع مشخص، به عنوان مثال Android.App.Activity، توسط لینکر نشانه‌گذاری شده است. تحلیل‌گر را به این صورت اجرا کنید: illinkanalyzer -t Android.App.Activity linker-dependencies.xml.gz خروجی: Loading dependency tree from: linker-dependencies.xml.gz --- Type dependencies: 'Android.App.Activity' ----------------------- --- TypeDef:Android.App.Activity dependencies ----------------------- Dependency #1 TypeDef:Android.App.Activity | TypeDef:XA.App.MainActivity [2 deps] | Assembly:XA.App, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null [3 deps] | Other:Mono.Linker.Steps.ResolveFromAssemblyStep خروجی شامل رشته(های) وابستگی است که با نوع مورد نظر آغاز شده و با آیتم‌هایی که به آن نوع وابسته‌اند ادامه می‌یابد. یک وابستگی می‌تواند به دلایل متعددی رخ دهد؛ به عنوان مثال نوع در یک متد ارجاع داده شده باشد، یا نام آن نوع در پرونده xml لینکر برای محافظت و نگهداری ثبت شده باشد. در این مثال، تنها یک زنجیره وابستگی به نام Dependency #1 وجود دارد. این زنجیره نشان می‌دهد که نوع Android.App.Activity در حین پردازش نوع XA.App.MainActivity توسط لینکر نشانه‌گذاری شده است. در این مورد خاص، به این دلیل که نوع MainActivity از نوع Activity ارث‌بری کرده و در نتیجه لینکر آن را علامت‌گذاری نموده و در اسمبلی نهایی نگه داشته است. همچنین می‌توان مشاهده کرد که ۲ وابستگی برای کلاس MainActivity وجود دارد. توجه داشته باشید که در رشته وابستگی بالا فقط اولین وابستگی از این دو (وابستگی به اسمبلی XA.App) نشان داده شده است. در نهایت، رأس اسمبلی به رأس ResolveFromAssemblyStep وابسته است. بنابراین مشاهده می‌کنیم که این اسمبلی در مرحله لینکر ResolveFromAssembly پردازش شده است. حال ممکن است بخواهیم وابستگی‌های MainActivity را مشاهده کنیم. این کار با اجرای دستور زیر در تحلیل‌گر انجام می‌شود: illinkanalyzer -r TypeDef:XA.App.MainActivity linker-dependencies.xml.gz خروجی: Loading dependency tree from: linker-dependencies.xml.gz --- Raw dependencies: 'TypeDef:XA.App.MainActivity' ----------------- --- TypeDef:XA.App.MainActivity dependencies ------------------------ Dependency #1 TypeDef:XA.App.MainActivity | Assembly:XA.App, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null [3 deps] | Other:Mono.Linker.Steps.ResolveFromAssemblyStep Dependency #2 TypeDef:XA.App.MainActivity | TypeDef:XA.App.MainActivity/<>c__DisplayClass1_0 [2 deps] | TypeDef:XA.App.MainActivity [2 deps] | Assembly:XA.App, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null [3 deps] | Other:Mono.Linker.Steps.ResolveFromAssemblyStep همچنین ببینید (SEE ALSO) msbuild(1) illinkanalyzer(1)