PDA

View Full Version : سوال: تفاوت بین F5 و ctrl+F5 هنگام اجرای کد C++



karbara121
یک شنبه 09 تیر 1392, 13:28 عصر
با سلام
من در حال مطالعه ی ویرایش دوم کتاب آموزش مفدماتی MFC تالیف آفای جناب هستم. در اولین پروژه ی این کتاب به سوالی برخوردم و آن اینکه
1- قبل از RUN برنامه توسط CTRL+F5 یا F5 بایستی آن را BUILD کنیم که در این کتاب به آن اشاره نشده است آیا نحوه ی RUN در VS 2008 و VS2010 متفاوت است؟ (من در حال استفاده از VS2010 هستم)
2- پس از BUILD در صورتی که از F5 یا آیکون سبز TOOL BAR استاندارد ( به طور کلی START DEBUGING ) جهت RUN برنامه استفاده کنیم کامپایلر منتظر نمی ماند تا کاربر کلیدی را PRESS کند ( CMD بلافاصله پس از اجرا بسته میشود ) و به عبارتیPAUSE نمیگردد؟
ولی در صورتی که از CTRL+F5 یا Start without debugging استفاده کنیم پس از اجرا cmd بلافاشله بسته نخواهدشد
در اینترنت دنبال دلیل این موضوع گشتم و به مواردی برخوردم که در صورت استفاده ار تنها f5 کد به درستی اجرا می شد ولی در صورت استفاده از ctrl+f5 دچار crash می گردد
چه تفاوتی بین این دو نوع start برنامه وجود دارد؟

saied_hacker
یک شنبه 09 تیر 1392, 17:03 عصر
1- فشردن کلید های ctrl + f5 باعث میشه که فایل exe شما اجرا بشه، خارج از محیط و کنترل ویژوال استودو. انگار که شما روی فایل exe برنامه کلیک کرده باشید. در این صورت ویژوال استودیو و دیباگر ان هیچ کاری به روند اجرا برنامه ندارن. و درصورت بروز خطا به شما اعلام نمی کنه که چرا و کجا این خطا رخ داده.
اگر شما از پروژه خودتون هیچ buildی نداشته باشید خوب مثلما در اولین اجرا چه با دیباگ چه بی دیباگ نیاز هست که از پروژه شما یک build گرفته شده و فایل exe ایجا بشه....
و هیچ فرقی بین vs 2005,2008,2010,2012 درنحوه بیلد گرفتن و دیباگ وجود نداره

وقی شما با f5 پروژه رو ران کنید ویژوال استودیو و ابزارهای دیباگ ان تمام روال اجرای دستورات برنامه رو زبر نظر دارن، چه متغیری داریم و چه مقداری داره، کدوم تابع کی اجرا شد و بعد مقدار متغیر های چی شد و... پس در صورت بروز خطا این اطلاعات می تونه به شما در رفع خطا کمک کنه در حالکه Start without debugging برنامه رو به صورت مستقل اجرا میکنه و خارج از کنترل ویژوال استودیو.


اگرمیخواهید پوژه شما بعد از اتمام دستورات از بنامه خارج نشه این خط رو قبل از return 0 اضافه کنید.
system("pause");