اشکال زدایی با استفاده از دیباگر IAR C-SPY

برنامه اشکال زدایی

 شروع اشکال زدایی 

 سازماندهی پنجره ها

 بازرسی کد دستورات

 بازرسی متغیرها

 تنظیم و مانیتور کردن breakpoints

 اشکال زدایی در مد disassembly

 مانیتور کردن حافظه 

بررسی ترمینال های ورودی و خروجی I/O

 رسیدن به انتهای برنامه

 

  • این آموزش ادامه سیکل توسعه یافته ای است که از قبل در آموزش قبلی شروع شده بود و به بررسی مشخصات پایه C-SPY  می پردازد.
  • توجه داشته باشید که ، با توجه به بسته نرم افزاری IAR که در سیستم خود نصب کرده اید ، ممکن است شامل  C-SPY باشد و یا نباشد ، در این آموزش فرض بر این گرفته شده است که شما از شبیه ساز C-SPY استفاده می کنید.

 

 برنامه اشکال زدایی

برنامه project1.out ، که در آموزش قبلی ایجاد شده است ، حالا آماده است تا در C-SPY اجرا شود جایی که شما می توانید متغییرها را نگاه کنید ، breakpoints  را تنظیم کنید ، کد ها را در مد disassembly  بررسی کنید ، مانیتورینگ ثبات ها و حافظه ، و پرینت خروجی برنامه در ترمینال پنجره I/O.

 

شروع اشکال زدایی

قبل از شروع برنامه ، شما باید چند گزینه را تنظیم کنید.

  1. انتخاب project>Options و سپس پوشه Debugger. در صفحه setup ، مطمئن شوید که شما simulator  را از لیست کشویی Driver و همین طور گزینه  Run to main  را انتخاب کرده اید. بر روی Ok کلیک کنید.
  2. انتخاب Project>Download and Debug. روش دیگر، کلیک بر روی دکمه  که  Download and Debug در نوار منو است. C-SPY با برنامه project1.out که بارگذاری شده است شروع به کار می کند. علاوه بر پنچره هایی که از قبل در IDE باز بوده است ، مجموعه ای از پنجره های مشخصه C-SPY حالا در دسترس هستند.

 

سازماندهی پنجره ها

در IDE ، شما می توانید پنجره ها را در مکان های خاص قرار دهید که در اصطلاح به آن dock windows  گویند و همین طور در زبانه های گروهی آن ها را جایگذاری و یا سازماندهی کنید. شما همچنین می توانید یک پنجره شناور ایجاد کنید به این معنی که آن همیشه در بالاترین قسمت دسترسی نسبت به دیگر پنچره ها قرار می گیرد. اگر شما سایز و یا مکان پنجره شناور را تغییر دهید ، دیگر پنجره های باز در حال حاضر هیچ اثری بر روی پنجره شناور نخواهد گذاشت.

 

  در نوار وضعیت ، که در زیر پنجره اصلی نوشته IAR Embedded Workbench IDE قرار گرفته است ، شامل کمک های مفیدی درباره ی چگونگی ترتیب پنجره ها است . (که شما می توانید با توجه به قرار گیری آن ها اطلاعات مفیدی را کسب کنید) برای اطلاعات بیشتر ، IDE Project Management and Building Guide for ARM  را ببینید.

مطمئن شوید پنجره های زیر و محتویات پنجره باز باشد و در صفحه نمایش قابل مشاهده باشد: پنجره workspace با پیکربندی های ساخته شده در آموزش پروژه قبلی project1  به صورت فعال ، پنجره ادیتور (ویرایش گر) با سورس فایل های Tutor.c  و utilities.c و همین طور پنجره Debug log.

 

بازرسی کد دستورات

  1. برای بازرسی کد دستورات ، بر روی فایل Tutor.c  در پنجره Workspace دابل(دوبار پشت سر هم) کلیک کنید.
  2. با فایل نمایش داده شده Tutor.c در پنجره ادیتور ، اولین گام حرکت با فرمان Debug>Step over

 روش دیگر ، بر روی دکمه  روی نوار ابزار که همان Step Over است کلیک کنید.

گام حرکت را تا تابع InitFib تکرار کنید همانند تصویر زیر.

  

 

  1.  انتخاب Debug>Step Into  باعث می شود که گام بعدی داخل تابع InitFib شود.

 روش دیگر، بر روی دکمه  روی نوار ابزار که همان Step Into است کلیک کنید.

 در سطح کد، فرمان های Step Over و Step Into  به شما اجازه می دهد که برنامه تان را اجرا کنید به صورت یک دستور در یک زمان . Step Into گام های حرکت را در داخل تابع و یا به صورت فراخوانی زیر روال انجام می دهد، در حالی که Step Over  توابع را به صورت یک گام یک مرحله ای اجرا می کند یعنی داخل تابع را نشان نمی دهد. برای دیدن جزئیات بیشتر می توانید  C-SPY Debugging Guide for ARM را مطالعه کنید.

وقتی که Step Into  را اجرا کردید ، توجه داشته باشید که پنجره فعال در حال دید شما تغییر خواهد کرد به Utilities.c  بخاطر آن که تابع  InitFib  در این فایل قرار گرفته است.

 

  1. از فرمان Step Into  استفاده کنید تا جایی که به حلقه for  برسید.

 

  1. از Step Over استفاده کنید تا جایی که به فایل هدر حلقه for  برگردید .(منظور به همان فایل قبلی که در آن بودید برگردید.) توجه کنید که گام های حرکت که تا به این جا بررسی شد  به صورت سطحی بر روی توابع عمل می کنند نه بر روی کل دستورات. 

شما همچنین می توانید گام های حرکت را بر روی کل دستورات انجام دهید. با انتخاب Debug> Next statement دستورات به صورت کلی در یک زمان اجرا می شود. روش دیگر ، بر روی دکمه  روی نوار ابزار که همان Next statement است کلیک کنید.

توجه داشته باشید که این فرمان چه تفاوت هایی با فرمان Step Over و Step Into دارد.

 

 بازرسی متغیرها

C-SPY  اجازه می دهد به شما تا متغیرها و عبارات را در داخل سورس کدها تماشا کنید ، بنابراین شما می توانید متغیرهای برنامه تان را که  در حال اجرا هستند  به صورت مداوم پیگیری کنید. شما می توانید متغییر ها را به چندین روش نگاه کنید. برای مثال ، در آن نقطه از پنجره سورس (کدها) با اشاره گر موس (اشاره گر موس خود را بر روی متغییر نگه دارید تا مقدار آن نمایش داده شود) ، یا باز کردن یکی از پنجره های Auto و locals و Live Watch و Statics  و یا  Watch windows. در این آموزش ، ما به بعضی از این روش ها و یا به عبارتی دیگر متدها نگاه خواهیم کرد. برای اطلاعات بیشتر درباره ی بازرسی متغیرها راهنمای C_SPY Debugging برای  ARM  را ببینید. 

توجه : وقتی سطح بهینه سازی  None استفاده شود ، تمام متغیر های غیر استاتیک (فعال) در کل محدوده  خود بصورت زنده خواهند بود  و در نتیجه ، متغیرها به طور کامل اشکال زدایی می شوند. وقتی سطح بهینه سازی higher استفاده شود ، متغیر ها ممکن است به طور کامل اشکال زدایی نشود.

 

استفاده از پنجره Auto

  1. با انتخاب View>Auto پنجره Auto  باز می شود.

 پنجره Auto  مقدار(value) فعلی عبارت های (expression) تغییر یافته را نشان خواهد داد.

  1. گام ها را ادامه دهید تا چگونگی تغییرات مقادیر (value)  را ببینید.

 

تنظیم watchpoint

و بعد شما برای بازرسی متغیرها از پنجره Watch استفاده خواهید کرد.

  1. با انتخاب View>Watch پنجره Watch باز می شود. توجه داشته باشید که آن به صورت پیش فرض  با پنجره Auto  که از قبل باز است به صورت گروهی در یک زبانه دیگر قرار می گیرد.
  2. تنظیم Watchpoint در متغیر i که در این برنامه استفاده شده است: بر روی مربع نقطه چین که به صورت سایه دار در این پنجره مشخص شده است کلیک کنید . در فیلد ورودی که ظاهر می شود ، حرف i را تایپ کنید و سپس بر روی Enter کلیک کنید.

 شما همچنین می توانید متغییر مورد نظر خود را از پنچره ادیتور به پنجره Watch بکشید.

 

  1. آرایه Fib را از تابع InitFib انتخاب کنید ، سپس آن را به سمت پنجره Watch بکشید.

 در پنجره Watch مقادیر فعلی i و Fib  نشان داده خواهد شد. شما می توانید با باز کردن آرایه Fib جزئیات بیشتری از آن را ببینید.

 

  1. با اجرای تعداد بیشتری از گام ها می بینید که چطور مقادیر i و Fib  تغییر می کنند.
  2. متغیر ها را از پنجره Watch پاک کنید ، با انتخاب آن ها و فشردن Delete.

 

تنظیم و مانیتور کردن breakpoints

C-SPY شامل یک سیستم breakpoint قدرتمند با ویژگی های بسیار است. برای جزئیات اطلاعات بیشتر درباره ی breakpoints ،  می توانید C-SPY Debugging Guide  for ARM  را ببینید.

راحت ترین راه معمولا تنظیم breakpoint به صورت محاوره ای است ، به سادگی با درج نقطه در موقعیت و یا در نزدیکی یک دستور و سپس با انتخاب فرمان  Toggle Breakpoint . 

  1. در این روش   با استفاده از breakpoint که بر روی تابع فراخوانی شده GetFib تنظیم شده است: اول ، بر روی زبانه Utilities.c که در پنجره ادیتور است کلیک کنید و سپس بر روی دستوری که در موقعیت قرار دارد کلیک کنید تا نقط درج اعمال شود. سپس Edit>Toggle Breakpoint  را انتخاب کنید.

روشی دیگر ، با کلیک کردن بر روی دکمه  در نوار ابزار که همان Toggle Breakpoint است.

یک breakpoint در این تابع فراخوان ایجاد خواهد شد. تابع فراخوان هایلایت خواهد شد و در آنجا یک نقطه قرمز در حاشیه خواهد بود تا نشان دهد که در آنجا یک breakpoint وجود دارد.

 

 برای مشاهده تمام breakpoint های تعریف شده ، با انتخاب View>Breakpoints پنجره breakpoints باز می شود که تمام نقاط انتخابی در این پنجره قابل مشاهده است. شما می توانید اطلاعاتی درباره ی اجرا breakpoint را در پنجره Debug Log پیدا کنید.

 

اجرا تا نقطه breakpoint

  1. برای اجرا برنامه تان تا رسیدن به نقطه breakpoint ، با انتخاب Debug>Go.

 روشی دیگر ، با کلیک کردن بر روی دکمه  در نوار ابزار که همان Go  است.

برنامه تا breakpoint  که شما ایجاد کرده اید اجرا خواهد شد. پنجره Watch مقدار عبارت Fib را نشان خواهد داد و پنجره Debug Log شامل اطلاعاتی درباره  Breakpoint  خواهد بود.

  1. انتخاب breakpoint ، راست کلیک و انتخاب Toggle Breakpoint (code از محتویات منو ظاهر شده ، و یا انتخاب Toggle Breakpoint از منوی Edit باعث پاک شدن  breakpoint  می شود.

 

 

 

اشکال زدایی در مد disassembly

اشکال زدایی با C-SPY معمولا سریعتر و سرراست تر است در مد سورس کدهای C++/C . به هر حال ، اگر شما بخواهید کنترل بیشتری بر روال سطح پایین تر داشته باشید ، شما می توانید  در مد disassembly که هر گام مربوط می شود به یک ساختار اسمبلی اشکال زدایی کنید. C-SPY  اجازه می دهد به شما تا به آسانی بین هر دو مد سوئیچ کنید.

  1. اول برنامه تان را با کلیک کردن بر روی دکمه  در نوار ابزار ریست کنید.
  2. با انتخاب View>Disassembly پنجره Disassembly باز می شود، اگر آن از قبل باز نبوده باشد. شما کد های اسمبلی مربوط به دستورات c در حال اجرا را خواهید دید.

 برای دیدن اطلاعات کد coverage ، در پنجره  Disaddembly  راست کلیک کنید و Code Coverage>Enable  و سپس Code Coverage>Show  را از محتویات منوی ظاهر شده انتخاب کنید.

 فرمان گام های حرکت را در پنجره ی Disassembly انجام دهید و توجه داشته باشید که اطلاعات کد coverage به وسیله ستاره سبز نشان داده می شود.

 

مانیتور کردن حافظه

پنجره Memory  به شما اجازه می دهد که ناحیه های از حافظه را که انتخاب کردید مانیتورینگ کنید. در مثال زیر ، حافظه مربوط به آرایه Fib مانیتور خواهد شد. 

 

  1. با انتخاب  view>Memory  پنجره Memory باز می شود.
  2. پنجره Utilities.c را فعال و Fib را انتخاب کنید. سپس آن را از پنجره کد C  به پنجره Memory  بکشید.

 محتویات پنجره در پنجره Memory مربوط است به همان Fib  که انتخاب کرده اید.

  1. برای نمایش محتویات حافظه به صورت 16 بیتی ، با انتخاب فرمان x2 Units از منو کشویی به شکل پیکان که بر روی نوارابزار پنچره حافظه قرار دارد می توان استفاده کرد.

 

 اگر کل واحد حافظه در تابع InitFib در برنامه C  هنوز مقدار دهی اولیه نشده است ، گام های حرکت را ادامه دهید و توجه داشته باشید که چگونه محتویات حافظه به روز رسانی می شود.

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

پنجره حافظه را ببندید.

 

بررسی ترمینال های ورودی و خروجی I/O

بعضی وقت ها ممکن است که شما مجبور باشید ساختمان برنامه تان را اشکال زدایی کنید در حالی که از stdin و stdout  استفاده کرده اید بدون امکان داشتن سخت افزار مورد نظر خود. C-SPY  به شما اجازه می دهد تا stdin و stdout را شبیه سازی کنید به طریق استفاده از  پنجره ترمینال I/O . 

توجه :‌ پنجره ترمینال I/O فقط در C-SPY  قابل دسترس است .

  1. با انتخاب View>Terminal I/O خروجی از عملیات I/O به نمایش در می آید.

 

 محتویات داخل پنجره بستگی به این دارد که تا چه حد شما برنامه را اجرا کرده باشید. ولی فقط با یک بار اجرا محتویات آن طبق پنجره نمایش داده شده بالا خواهد بود.

 

رسیدن به انتهای برنامه

  1. برای کامل کردن برنامه تان ، با انتخاب Debug>Go . 

 و یا با روش دیگر ، بر روی دکمه   که در نوارابزار قرار دارد که همان Go  است.

از آنجایی که  با breakpoint های دیگری مواجه نشوید ، C-SPY‌ به آخر برنامه می رسد و یک پیغام Program exit reached در پنجره Debug Log چاپ می شود.

کل خروجی از برنامه حالا در پنجره ترمینال I/O  نشان داده ، شده است. 

اگر شما می خواهید دوباره شروع کنید با برنامه در حال حاضر خود ، با انتخاب Debug>Reset ، یا این که با کلیک بر روی دکمه در نوارابزار که همان عمل Reset را انجام می دهد.

  1. برای خروج از C-SPY ، با انتخاب Debug>Stop Debugging. و یا با کلیک بر روی دکمه  بر روی نوارابزار. محیط اشکال زدایی بسته می شود.

C-SPY همچنین دیگر امکانات اشکال زدایی بیشتری فراهم کرده است . بعضی از این ها برای مثال macros و شبیه سازی وقفه ها است که در آموزش های زیر توصیف شده است.

برای جزئیات بیشتر درباره طریقه استفاده از C-SPY ،

C-SPY Debugging Guide for ARM را ببینید. 

 

 

نظرات (0)

نظر ارسال شده‌ی جدیدی وجود ندارد

دیدگاه خود را بیان کنید

  1. ارسال دیدگاه بعنوان یک مهمان - ثبت نام کنید و یا وارد حساب خود شوید.
پیوست ها (0 / 3)
اشتراک‌گذاری موقعیت مکانی شما
متنی که در تصویر ذیل مشاهده می‌کنید را وارد نمایید