ورود

View Full Version : مشكل پريدن كامپايلر از چند خط در برنامه



sql_qassem
شنبه 15 تیر 1387, 11:44 صبح
نمي دونم تا حالا به مشكل پريدن كامپايلر از چند خط در برنامه برخورد كرديد يا نه
اما بنده در اين ده سال كار كردن با دلفي و قبل از اون در پاسكال اين مشكل رو داشتم
تا حالا هم با كلك هاي رشتي و غيره يه جوري مشكل رو حل كردم اما دليل اون رو نمي دونم
و راه حل اساسي براش پيدا نكردم .


منو راهنمايي كنيد.

SYNDROME
شنبه 15 تیر 1387, 16:56 عصر
نمي دونم تا حالا به مشكل پريدن كامپايلر از چند خط در برنامه برخورد كرديد يا نه
اما بنده در اين ده سال كار كردن با دلفي و قبل از اون در پاسكال اين مشكل رو داشتم
تا حالا هم با كلك هاي رشتي و غيره يه جوري مشكل رو حل كردم اما دليل اون رو نمي دونم
و راه حل اساسي براش پيدا نكردم .
منو راهنمايي كنيد.
تا جایی که من متوجه شدم زمانی که خطی در برنامه نوشته شود که در روند اجرای برنامه تاثیر نداشته باشد این مشکل به وجود می آید.
مثلا i := 0 واگر I در جایی از برنامه استفاده نشود این مشکل به وجود می آید.
موفق باشید

moonplant
شنبه 15 تیر 1387, 22:20 عصر
مواقعی که چند تا thread داریم هم این اتفاق می افته...یعنی کنترل برنامه از یک ترد به ترد دیگر سوییچ میکنه.

vcldeveloper
یک شنبه 16 تیر 1387, 04:05 صبح
مواقعی که چند تا thread داریم هم این اتفاق می افته...یعنی کنترل برنامه از یک ترد به ترد دیگر سوییچ میکنه.
دیباگر در هر زمان روی یک Thread عمل Trace رو انجام میده، غیر از اینکه روی Thread های مختلف Break Point گذاشته باشید.


مشكل پريدن كامپايلر از چند خط در برنامه
باید یک مثال از کدی که میگید همچین اتفاقی براش میافته، میگذاشتید تا بشه دقیقا توضیح داد، اما بطور کلی، کامپایلر دلفی بطور پیش فرض حالت Optimization رو فعال نگه میداره. در این حالت کامپایلر سعی میکنه تا حد امکان -از طریق تکنیک های مختلف - کارایی کد نوشته شما را بالا ببره. یکی از این تکنیک ها این هست که کامپایلر کدها و متغیرهایی که در روند اجرای برنامه هیچ نقشی ندارند را اصلا کامپایل نمیکنه. این یک مشکل نیست، یک مزیت هست! البته علاوه بر این رفتار کامپایلر، بخش های از کدهای نوشته شده هم هستند که برای حفظ Syntax زبان مربوطه لازم هستند، ولی موجب تولید کد اجرایی نمیشند.
IDE دلفی در زمان کامپایل کنار هر خطی از برنامه که کد اجرایی تولید کنه، یک دایره آبی رنگ نمایش میده. خطوطی که دایره آبی ندارند، ممکنه جزو ساختارهای زبان دلفی باشند که برای زبان دلفی لازم هستند، ولی کد اجرایی تولید نمی کنند، یا جزو کدهایی که نوشتید، ولی هیچ کجا استفاده نکردید (مثلا یک متد که در هیچ کجا فراخوانی نشده). اگر عضو بی مصرف یک متغیر باشه، دلفی یک Hint به شما نمایش میده.
یکی دیگه از دلایلی که ممکن هست دیباگر در زمان trace از روی برخی خطوط پرش کند، ساختارهای شرطی برنامه هستند (مثل دستورات if, case و... یا دستورات کامپایل شرطی مثل $IFDEF و...).