PDA

View Full Version : مقاله ايي در مورد نحوه ديباگ كردن



brians2000
پنج شنبه 30 تیر 1384, 04:32 صبح
سلام.

دیباگ سخت ترین بخش یک برنامه است! من خیلی خوشحالم که دلفی حداقل از این لحاظ بسیار قوی طراحی شده چون واقعا این چیزها آدم رو عذاب می ده! :)) جاتون خالی 4 صبحه دارم دیباگ!!! می کنم اونم یه برنامه 950000 خطی که هرچند ساخت یافته و درست نوشته شده ولی به دلیل عادت بد بنده از پوینتر زیاد توش استفاده شده و به همین دلیل :)) باگهایی دو چندان!!! در منوهای ریز! برنامه وجود دارند که :)) واقعا چجوری بگم دارم یه خط یه خط تریس می کنم تا برسم به کجا که اشتباه کردم!!!!! خنده داره ولی خیلی جاها از مقادیر اشتباه استفاده کردم مثلا توی یه حلقه از مقادیر خارج از حلقه! استفاده کردم و جالبه که خودم!!! توی داکیومنت درست اونرو نوشتم! بدترین باگهایی که پیش میاد اشتباهات در همین چیزهاست! ... یادم نمی ره یه سرور مالتی ثرید نسبتا حجیم که توی همین پروژه اخیرم( اکسترا پوینت) کار شده رو همکار عزیزم در چند جا از مقادیر عمومی استفاده کرده بود!!!!!!!!!!!!!!!!!!!!!!!! شاهکار !!! نمی دونید برای پیدا کردن همین باگ چقدر داکیومنت هارو خوندم ! آخر سر دیدم آقا پارسر های پاور ایکس ام رو عمومی تعریف کرده و البته : اگر می دونستم 4 خط بود ولی وقت بنده رو یک روز گرفت! تازه اینجا همه چی داکیومنت میشه در نظر بگیرید که یکنفر کیلویی !! (بیسیکی منظوره! ) کارو انجام بده... :))) خوب! دوستان یادشونه در قدما! ما با این سی چی می کشیدیم! مخصوصا که اشتباهات توی سی اجتناب ناپذیرند (یعنی یادتون میره گاهی پوینتر باید پس کنید نه خود اصل کاریریرو !!!!!!!!!!!!!!!

brians2000
پنج شنبه 30 تیر 1384, 04:33 صبح
خوب... می خواهم براتون از متدهای دیباگ و طراحی یک برنامه بنویسم... البته در مدل بورلندیش! دوستان هم اگر دوست دارند بعد از من مطلب بگذارند! من دیباگ چند تا پروژه بزرگ رو انجام دادم و معمولا کار رو با تعقیب داکیومنت ها و بعد دیتیل کردن اون انجام می دهم روشی که نسبتا راحت اما بیشتر به درد شرکتهای بزرگ می خوره چون ما ها!!! (من و شما ) داکیومنت نمی کنیم کاریرو! و :))) راستشو بخواهید من موقعی که مدیر تیم هستم بهتر کار می کنم تا موقعی که عضو تیمم چون در حالت اول بقیه داکیومنت می کنند ولی معمولا کسی به من نمی تونه زور بگه و خود من کارها رو بدون داکیومنت ول می کنم !!!!!! (البته غیر از این کار) !!
راستی : شما فکر می کنید محیط شرکتهایی مثل بورلند یا مایکروسافت چجوریه؟ :) برنامه نویساشون منظمند؟ همه کارهارو بلدند؟ !!! خیررر! خیلی از برنامه نویسان بی نهایت ماهر از طراحی یک پروژه بانک اطلاعاتی فرار می کنند به دلیل یکنواخت بودن و تنفر برانگیز بودنش! و برنامه نویسان دیتا بیس هم از برنامه نویسی کارهای اساسی و تحقیقی در می روند چون حال یاد گرفتن ندارند ولی مشکل اینه که اولی می تونه کار دومی رو بکنه ولی دومی هیچوقت! :)) چون کار اولی سالها طول می کشه تا یادگرفته بشه! خوب..............................
در بورلند تقریبا 1200 نفر کار می کنند که در چند کشور بخصوص روسیه و ژاپن و آمریکا پراکنده هستند ولی مغز اصلی شرکت در آمریکاست. اونهاهم آدمهایی مثل ما هستند و توی اتاقشون نظمی وجود نداره! معمولا کسی میزهای اونهارو جرات نمی کنه تنظیم کنه (مطالب وبلاگ بورلندیها و همینطور عکسهای مربوطه نشون می ده! ) معمولا من نکات رو روی کاغذ ریز ... روزنامه و یا حتی اگر دستم بیاد کاغذ مچاله می نویسم ! همه همینطورند ! در مایکروسافت کسی دست به میز برنامه نویسها نمی زنه چون دعوای بزرگی راه میفته (که روزمرست! چون شرکت بزرگیه و تی بوی ها :)) عشق تمیز کردن دارند ! مثل مادرها! ) ... دیباگها متدهای مختلفی دارند که باگ در حد صفر مایکروسافتی و طبقه بندی های اراکلی و سیتسماتیک بورلندی از جمله اونهاست (دلفی 2005 باگ داشت چون کار روسها بود بخشیش! ) ............

brians2000
پنج شنبه 30 تیر 1384, 04:33 صبح
خوب! حالا می رویم سر دیباگ...من کمی درگیر هستم ولی سعی می کنم اگر وقت کنم بنویسم... کار عملی (بیل رو بردار بریم مهندسی یخدی! ) دیباگ هر چیزی سرجای خودش! البته اگر خیلی با اکتیو ایکس و مقادیر بدون تایپ کار کردید کارتون سخته (یکم زیادی) و اگر کارهای مالتی ثریدی دارید که :)) اول باید چه چیزی رو دید بعد به کجا سر زد؟

brians2000
پنج شنبه 30 تیر 1384, 04:34 صبح
قبل از هرچیز : ببینید اگر برنامه مالتی ثرید دارید : مقادیر عمومی دارید؟ و اگر لازمه داشته باشید (که نیست خیلی وقتها) آیا اونها رو در بصورت سیف ثرید نوشتید یا نه! :)) همینجوری!
اگر برنامه رو درست نوشتید ببینید چه پروسه هایی فراخوانی شدند تا به اینجا (باگ) برسند؟ ببینید ایجاد کننده و مقدار دهنده اصلا کجا کار می کنند و کجا منبع باگ شما مقدار دهی میشه. و در عین حال سعی کنید علاج قبل از مشکل کنید یعنی : مشکل رو قبلش حل کنید !!
مثلا مقدار دهی اولیه کنید (در دات نت تا حدودی این مشکل حل شده البته زورکی! ) ... بعد قیاس (غیاث آباد نه! ) کنید که آیا ساخته شما ایجاد شده ؟ مقداری داره بعد کد رو روش اعمال کنید.

خوب... در مطلب بعدی کمی با چیزهای جدی تر سر و کله می زنیم با متدهای عملیتر.

brians2000
پنج شنبه 30 تیر 1384, 07:53 صبح
Ryan,

Inline variable declarations are a possibility. There are a number of
different syntaxes that are possible.

For example, there isn't really a need to use the word "var" in the for loop
example. For x: integer := 0 to 100 do is non ambiguous.

The most powerful example is to use no syntax at all - using techniques
we've labeled "type algebra", it is theoretically possible for the compiler
to infer the correct type of a variable by how it is used. Not a typeless
var like variants, but a strongly typed variable whose type is a best fit
for how it is used. More research is needed here.

-Danny

from RYAN
delphi is something else :) many thanks for Delph for CE.

how about add add a inline variable declaration? it is possible I did it
in
my pascal script interpreter I used in my program it is so nice look!:

for var t:integer=0 to 100 do begin
var a:integer=0;
a+=2;
end;


I know delphi have optimization and no need for this also refactoring
allow
people to declare their variable easily,,, but I believe after alongtime
it
is a requirement, like C most of times I want to do this and it not too
bad, i know delphi do all optimizations and original syntax of delphi with
it's optimization it much more better than this,,, :)) inline variable
declaration, I did it in my pascal script in which Framework I designed...
!!!

:) thanks for your CF Delphi .and thanks for your replies,



regards.
Ryan.




یک سوال و یک جواب! دانی به نظر من یکی از بهترین و در حقیقت جزو ده برنامه نویس اول دنیا و استاد بزرگ برنامه نویسی است.!!! ایده هایی که توی ذهن ماها پیدا میشه کمک بزرگیه در حقیقت می تونیم با طرح اون به نتیجه برسیم... آیا دلفی را دوست دارید/ به یاریش بشتابید...

بورلند دوستان!

امروز وقت بیداری است! :) اساتید محترم! آقایان اینپرایز! کرامتی و سایرین... به جای پشت کردن به دلفی سنگر رو پر نگه دارید تا شرکت مورد علاقه ی همه ی ما زنده بمونه!

brians2000
جمعه 31 تیر 1384, 03:55 صبح
خیلی خوب....

من توضیح دادم به دوستمون که چجوری باید یه محوطه بحرانی! تعریف کنند... خیلی ها توی یه پروسیجر محوطه رو تعریف می کنند و بعد می بندند خود من هم چندین بار اینکارو کردم!اینکار درست نیست و باید محوطه عمومی برای لاک ها تعریف بشه حالا می خواهد در یک کلاس باشه یا گلوبال!!! ... در هر وضع صحیحه و کارش رو انجام می ده...
خوب

ببینید زمانی که می خواهید دیباگ کنید اول باید ببینیم چجوری برنامه رو نوشتید:

بیسیک کارها عمدتا به دلیل اینکه برنامه نویسان ضعیف تری هستند طوری برنامه هارو بد می نویسند که خودشون هم ازش سر در نمی آرن! خود من یکیش بودم... سال 1993 اولین باری بود که یه برنامه با وی بی نوشتم ! توی داس یه هم برنامه با بیسیک نوشته بودم(تازگیها توی پاسکال وارد شده بودم! ) که از اون برنامه هایی که تف مالی مطلق بود یعنی سر و تهش مشخص نبود! اکثر شما ها هم همینجوری می نویسید به غیر از کسانی که سابقه دارند مثل آقای کرامتی و یا اینپرایز و ایضا آقای کشاورز اکثر شماها هنوزم از مدل بیسیکی برای کارهاتون استفاده می کنید... این آقایان به دلیل اینکه توی کارهای غیر بیسیکی سر و کله زده اند و با سی ++ و ساختار فوق العاده قوی ساخت یافته اون سر و کله زدند و ایضا با دلفی زندگانی و سر و سری دارند ناچارا به سیستم ساخت یافتگی روی آورده اند ! دردسر ظاهرا بیشتر ولی کار راحت کن!

شما یک مجموعه رو به عنوان بیستون بنویسید.
بعد بقیه رو از اون به ارث برسونید.
(من طریقه اش رو اینجا حوصله توضیح دادن ندارم! )
خوب.. اگر بیس شما دیباگ شده باشه؟ پس باگ از کجاسسسسست؟ :) از بچه اشه! به غول بعضیها کله ی برنامه شپش گذاشته چون مدرسه ی بدی رفته! !! اولین کار که می کنید یه دونه برک پوینت رو مشخصا قبل از محوطه باگی می گذارید بعد شروع به تریس می کنید! دونه به دونه! نگاه کنید... دونه دونه وریبل های لوکال رو نگاه کنید... اگر می خواهید زودتر به باگ برسید اول سرسری بدون رجوع به زیر مجموعه (اف 8 در دلفی) اونرو پویش کنید! به باگ که رسیدید :) یه دونه برک پوینت بکارید روی کله اش!

نکته: اولا برنامه ای که خطاش رو تعریف نکردید با ترای اکسپت و ترای کچ دو ریال نمی ارزه! چون باگ است! همونطور که گفتم باید ترمینیتور هارو حتما در ترای فاینالی تعریف کنید لطفا برای من از سرعت نگید که دیگه این برای اینکار طراحی شده... این در حقیقت پوششی هستش که روی بلاک قرار میگیره تا بعد از خروج از بلاک بازگشتی به محوطه بعد اون داشته باشه! (کد اسمبلی رو براتون توضیح می دهم) خوب.... حالا ...
به باگ که رسیدید برک پوینت داره! حالا با اف 7 برید داخل می تونید در داخل پروسیجر مربوطه (تابع در حال اجرا) که شدید بازهم همینجوری سرخطی بگیرید یعنی به خطا برسید بعد به زیر مجموعه برسید ! تا اینجا مشخص شد که خطا رو راحت میشه پیدا کرد... البته از روی گزارش اجرا هم می تونید به خطا برسید ولی بهتره که مسیر رو پیدا کنید ... و اینطوری اکثرا بهتر به نتیجه می رسید. خوب! :)
روشهای مهم ! نگاه کنید به مقادیر محلی : در کلاس و در فانکشن در حال اجرا. ببینید آیا مقادیر صحیح است؟ دقت کنید اندازه ی هر پوینتر رو ... ببینید سرریز دارید مثلا خارج از اون چیزی بنویسید (مشکل بزرگ !!!) این می تونه مقادیر رو خراب کنه و خطا بوجود بیاره.
استک رو تریس کنید! ثرید فعالی در حال اجرا می تونه منبع دیباگ شما باشه و نیازی نیست زیاد خودتونو درگیرش کنید...

brians2000
جمعه 31 تیر 1384, 03:56 صبح
خوب!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!! باگگگگگگگگگگگگگگگگگگگگگگگ !

کلاسها در دلفی در حقیقت پوینتر هستند پس باید مقدار دهی اولیه بشوند : یا تهی یا ایجاد بشوند.
حتما باید خالی بشوند (نشوند بد است! )
محوطه بندی ترای فاینالی رو رعایت کنید که یک باگ کل برنامه رو بهم نریزه
نگران رشته ها نه در سی شارپ و دلفی نباشید کلا دات نت ... خودشون خالی می شوند در حقیقت کامپایلر زحمتشو می کشه! ولی اگر عمومی باشند نوچ!
هیچ وقت از مقادیر عمومی به صورت زیاد در برنامه های سرور استفاده نکنید!
برنامه کیلویی بیسیکی الکی ننویسید ! کامپایلرها حتی سی شارپ و دلفی هم خود بخود باگ هایی دارند (من لیستی از اونهارا دیدم) ولی خیلی مهم نیستند.
ریکرسیو بعضی جاها ناگزیر است! ولی باید بازگشتی داشته باشد و باید حتما و گرنه برنامه هوا می رود.
توی سرور لطفا با جی دی آِی و گرافیک ویندوز سر و کله نزنید . ... یک کند است دو نیاز دارید سیف کد بنویسید و اصلا دلیل ندارد... از ثرید اصلی برای نمایش اطلاعات استفاده کنید مثلا یک تایمر.


آقای کرامتی! این وی بی روی لبخند حساسیت داره من زیاد لبخند می زنم توی متنم همش گیر می ده و باید دوساعت برم لبخند هارو پاک کنم در ضمن روی ی فارسی هم گیر می ده!

brians2000
جمعه 31 تیر 1384, 05:35 صبح
با سلامی دگر بار...
:)) به دلیل ذوق به نوشتن! تصمیم گرفتم که از این به بعد یک وبلاگ دلفی رو به زبان انگلیسی!!!! در خدمت دوستان باشم! فقط شرمنده شغل بنده یکجوریه که مطالب رو پراکنده می دونم ولی خوب... می تونه کمک باشه برای دوستان... من اصلتا طراح انژین گیم بودم که سالهاست ! در کار دیگری رفتیم از بی پولی... البته شرافت خودمرو حفظ کردم و هنوز دیتا بیس کار نشدم ولی خوب..! به موقعش به اون طرفم می ریم! البته بازهم می گم این به آن معنی است که چراغ قرمز نیست یعنی مشخصه که برنامه نویسی دیتا بیس رو هر کسی تسلط داشته باشه ولی به دلیل تنفر بیش از حد از اون باهاش کاری ندارم! صبر کنید ما درخواست وبلاگ دادیم ببینیم کجا نصیبمون میشه! هرجا شد بد نیست خوشم نمیومد توی وبلاگ های عادی مشتری شم بهتر دیدم یه وبلاگ نیمه رسمی بزنم که حداقل همه نرن یه شاخه بزنن توش مشتریشم از طریق تبلیغات همسایه ها زیاد شه! انگلیسی بنده افتضاحه ولی خوب کارمو راه می اندازه و خیلی مهم نیست چون با این چینیا و هندیا که اینجا هستند (که از من بهتر صحبت می کنند انگلیسی رو) اصولا انگلیسی منهدم شده! در هر وضع: زبان سایت انگلیسی خواهد بود! و خوشحال می شوم که کامنت بدید و فقط باید ببینم کجا نصیبم می شه چون معلوم نیست زیر شاخه های اصلی نصیب کسایی که تو آمریکا در حال حاضر کار نمی کنند بشه که البته بهم گفتند الان نمیشه ... البته من عصبانیم چون سنگاپوریا و ژاپنیا دو سه تاشون دارند ولی خوب اونها مایه دارند و ما بیچاره ها از این چیزا نصیبمون نمیشه! اعتراض نمیشه کرد و حرف حقه.

دلفی و عشق ! اسم وبلاگ من خواهد بود.