بیژن بینایی GitHub
بیژن بینایی Rss

volatile کلید موفقیت...

نوشته شده توسط بیژن | در دسته لینوکس | نوشته شده در ۲۵-۰۳-۱۳۹۱

۲

چند هفته ای هست که به طور تخصصی دارم روی debugging (اشکال زدایی نرم افزار ها) کار می کنم. در همین میان یکی از مشکلات عمده ای که داشتم دسترسی نداشتن به مقدار تمام متغییر ها در کد بود.

همون طور که می دانید IDE های مختلف یکی از ویژگی های مشترکی که دارند نشان دادن مقدار متغییر در هنگام اجرای نرم افزار هست. همچنین شما می توانید یک متغییر را به watch list خودتون اضافه کنید تا همیشه بتوانید مقدار اون متغییر را حالا چه به صورت ده دهی و چه به صورت دو دویی ببینید.

مشکل اونجا پیدا می شود که بعضی متغییر ها مقدارشون Optimize Out هست. جالبی کار برای من اونجا بود که من برنامم را با دو تا Option یا CFlag،

-g -O0

کامپایل می کردم و این آپشن مخصوصا اون که توش صفر هست به کامپایلر می گوید که هرگز متغییر ها را optimize نکن اما باز هم اون پیغام مسخره سر و کلش پیدا می شد

امروز دوستم رضا توی سایت atmel یک مطلب خیلی باحال که احتمالا راجع بهش صحبت می کنم را برایم فرستاد بعد خوندن اون یکم توی سایت atmel چرخ زدم و به Atmel Studio برخورد کردم.

توی یکی از فیلم های آموزشیش که راجع به Debug کردن بود من این کلید (keyword) که در هر دو زبان C و ++C هست را پیدا کردم

این واژه با قرار گرفتن قبل نوع یک متغییر می تواند باعث بشود که کامپایلر از هر گونه کرم (دستکاری) به این یک دونه متغییر صرف نظر کند

و به همین دلیل دیگر توی watch لیستتون اون عبارت مسخره را نمی بینید

به طور مثال اگر کد شما جیزی شبیه این باشه

int rc = gbee_sql_exec(object, command);

با تغییر آن به

volatile int rc = gbee_sql_exec(object, command);

دیگر متغییر شما بهینه سازی نمی شود درنتیجه در هنگام دیباگ می توانید مقدارش را ببینید

یا علی

نظرات (۲)

بستگی داره برنامه رو در حالت release کامپایل کنید یا در حالت debug. در حالت اول کامپایلر حداکثر سعی خودش را در بهینه سازی خواهد کرد. در حالت دوم سطر به سطر ترجمه می‌شود.

سعید جان IDE من anjuta هست و چه من بگذارمش روی ریلیز و چه بگذارم روی debug هر دو همین اتفاق براش می افته
تازه اضافه کردن اون دوتا آپشنی که نوشتم در حقیقت کاریه که شما وقتی حالت را عوض می کنید IDE برای شما انجام می دهد!

راستی چقدر زود کامنت گذاشتید این پست تقریبا ۵ دقیقه هست که منتشر شده!!!!
این را هم یک نگاه بندازید خالی از لطف نیسن
http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html