ورود

View Full Version : DEBUGGING DELPHI PROGRAMS



mehdi_naghdi
جمعه 12 بهمن 1386, 08:28 صبح
هنگامی که یک برنامه را می نویسید و سپس آنرا کامپایل می کنید ممکن است که برنامه آنطور که فکر می کردید کار نکند یا اینکه Errorهای زمان اجرا داشته باشد یا ممکن است مشکلاتی داشته باشد که به سادگی قابل شناسایی و قابل حل نباشند. به همین خاطر گزینه ها و ابزارهای زیادی برای کاوش رفتار یک Windows application قابل دسترسی هستند. به این ابزارها در حالت کلی Debugger & Tracer گویند.
دلفی به همراه خود یک Integrated Debugger و چندین ابزار دیگر دارد که به شما اجازه می دهد تا در رفتار برنامه در زمان اجرا کاوش کنید و نتایج اجرا را ببینید. وقتی برنامه ای در محیط دلفی اجرا می شود عملاً Integrated Debugger برنامه را اجرا می کند. دستوراتی که برای Debug کردن در Integrated Debugger موجودند عبارتند از:

Step Over command (the F8 key) , Trace Into command (F7) , Trace to Next Source Line (Shift + F7), Run to Cursor (F4) , Run Until Return (Shift + F8) , Debugging Libraries (and ActiveX Controls).

شما می توانید یک برنامه را در مد طراحی (design mode ) از ابتدا به صورت گام به گام بوسیله دستور Step Over اجرا کنید. همچنین می توانید از دستور Step Over برای اجرای خط بعدی برنامه استفاده کنید.
از دستور Trace Into برای کاوش در در کد منبع Functionها و Methodها استفاده کنید. به عبارت دیگر اجرای کد Subroutinها به صورت گام به گام و همچنین اجرای کد Subroutinهای فراخوانی شده توسط Subroutinهای دیگر و غیره.
دستور Trace to Next Source Line کنترل را به خط بعدی از کد منبع از برنامه تان صرفنظر از جریان اجرای برنامه منتقل می کند.
اگر شما می خواهید تأثیر اجرای خط معینی از کد برنامه تان را ببینید به آن محل بروید و سپس دستور Run to Cursor را فراخوانی کنید.
اگر در حال Trace کردن گام به گام هستید و در مرحله ایی قرار می گیرید که علاقه مند به ادارة گام به گام نیستید با فراخوانی دستور Until Return Run به Trace کردن گام به گام خاتمه می دهید و بقیه مراحل Debug به یکباره انجام می شود.
شما همچنین می توانید از Integrated Debugger برای Debug کردن یک DLL یا هر نوع از توابع کتابخانه ای ( مانند ActiveX control) استفاده کنید.
Debug Information
برای Debug کردن یک برنامه ما بایستی یکسری اطلاعات Debugی به برنامه اضافه کنیم که برای اینکار به قسمت
Project Options Compiler
رفته و در بخشDebugging گزینه های زیر را انتخاب می کنیم:
Debug Information: شمایی از آدرس های فایل اجرایی و تعداد خطوط کد منبع متناظر با آن را یه هر Unit اضافه می کند. که اندازه فایل DCU با این کار افزایش می یابد ولی روی اندازه و سرعت اجرایی تأثیر ندارد. به خاطر اینکه Linker این اطلاعات را وقتی که فایل exe را می سازد به آن اضافه نمی کند مگر اینکه ما به طور صریح اطلاعات DebugیTD32 را درخواست کنیم.
Local Symbols : اطلاعات Debugی دربارة تمام شناسه های محلی و نام ها و نوع های بخش Implimentation، Unit را اضافه می کند.
Refrence Information: اطلاعات مرجع سمبل های تعریف شده در یک Module را اضافه می کند که به Project Inspector اجازه می دهد تا آنها را نمایش دهد.
َAssertions: به شما اجازه می دهد تا َAssertions را اضافه کنید. Assert یا ادعا کدی است که به برنامه اضافه می کنید و اگر شرایط خاصی رخ داد برنامه تان را متوقف می کند. Assertionها بر خلاف Exceptionها و یا کدهای Error-detecting دیگر به طور اتوماتیک از برنامه تان حذف می شوند. بعد از تغییر این گزینه شما مجبورید برنامه تان را Rebuild کنید تا Assertion از کد برنامه تان اضافه یا کم شود.

Integrated Debugger از این اطلاعات برای Debug کردن یک برنامه استفاده می کند Debug Iformation به فایل اجرایی اضافه نمی شود مگر اینکه شما گزینه Include TD32 Debug Info را در صفحة Linker از Project Option انتخاب کنید. شما باید Debug Information را به فایل اجرایی تان اضافه کنید فقط اگر می خواهید که از یک External Debugger استفاده کنید. به عنوان مثال(TD32) Borland’s Turbo Debugger for Windowsیک External Debugger است. و اگر بخواهیم از Internal Debuger استفاده کنید آنرا انتخاب نکنید و یا از حالت انتخاب خارج کنید و سپس مجدداً برنامه را اجرا کنید تا از فایل اجرایی حذف شود.

Remot Debugging
اولین خصیصه ایی که به Delphi 4 اضافه شده بود Remot Debugging است. این تکنیک به شما اجازه می دهد تا یک برنامه ایی که روی یک کامپیوتر دیگر در حال اجرا است را Debug کنید. به طور نمونه یک سرور. برای اینکه Remot Debugging را فعال کنید باید ابتدا Remot Debugger client را روی مسیر ماشین (Target Machin ) نصب کنید. سپس باید با دستور borrdg.exe-listen ، Remot Debugger client را Start کنید که سرانجام آن به عنوان یک Service در Windows NT ، Start می شود. برای استفاده از این تکنیک باید گزینة including remote debug symbols را در صفحة Linker ازProject Options انتخاب کنید.

Attach to Process
در Delphi 5 این امکان اضافه شد که از طریق دستور Run قابل دسترسی می باشد. این خصوصیت به شما اجازه می دهد تا برنامه ایی که در سیستم از قبل در حال اجرا است را Debug کنید. وقتی که دستور Attach to Process را فراخوانی می کنید برنامه های در حال اجرا را خواهید دید. اگر شما یک برنامه دلفی که Source آن را دارید انتخاب کنید، می توانید به روش معمولی (قدیمی) برنامه را Debug کنید ولی اگر Source آنرا ندارید تنها می توانید فایل اجرایی را در سطح اسمبلی با استفاده از Cpu View، Trace کنید.

Using Breakpoints
همانطور که از نام BreakPoint بر می آید. وقتی مراحل اجرای برنامه تان به یک BreakPoint می رسد اجرای برنامه متوقف می شود البته از Delphi 5 به بعد BreakPoint علاوه بر توقف اجرای برنامه، عملیات دیگری نیز انجام می دهد.
انواع BreakPoint عبارتند از:
• Source breakpoints
• Address breakpoints
• Data breakpoints
• Module load breakpoints

Source breakpoints
وقتی پردزانده در صدد اجرای دستوراتی در آدرس بخصوصی است برنامه را متوقف می کند. برای ایجاد یک Source breakpoints روش های زیر وجود دارد:
1. کلیک کردن در ناحیه حاشه در پنجرة Code Editor .
2. بوسیلة کیلک راست روی یک خط بخصوص در کد برنامه و انتخاب کردن دستور ، Toggle breakpoints از Shortcut Menu.
3. فشار کلید F5.
وقتی که یک breakpoints ایجاد می کنید یک Icon در حاشیه سمت چپ کد برنامه ظاهر می شود و آن خط هم تغییر رنگ می دهد. به هر حال شما نمی توانید روی هر خط کد برنامه یک breakpoints Valid بگیرید. مثلاً Comment (توضیحات)، Declaration (تعیین نوع متغییر)، راهنمای کامپایلر یا هر عبارتی که کد قابل اجرا تولید نمی کند نمی توانند Valid breakpoints بگیرند اما اگر به آنها breakpoints بدهیم دلفی در زمان اجرا به شما هشدار می دهد و این هشدار را با رنگی خاص دادن به خط مربوطه و تغییر Icon، breakpoints آن نشان می دهد.

Address breakpoints
اگرشما کد منبع Procedure یا Function معینی را ندارید. می توانید یک Address breakpoints برای متوقف کردن اجرای برنامه در آن نقطه ایجاد کنید. در هر حال بدون داشتن کد منبع شما احتیاج به تکنیکی دارید تا آدرس کد مورد نظر را تشخیص دهید. دو تکنیک قابل دسترسی هستند یکی breakpoint را به طور مستقیم در Cpu View ایجاد می کند و دیگری روش غیر مستقیم است که از اضافه کردن breakpoint در Dialog Box استفاده می کند.

Data Breakpoints
اجرای برنامه را وقتی که مقداری در مکان معینی تغییر می کند متوقف می کند.روش اول این است که Source Break Point در محل شناسة مورد نظر ایجاد کنیم وقتی برنامه در آن خط متوقف شد کادر محاوره ای Add Data Breakpoint ظاهر می شود که شما می توانید به طور مستقیم نام شناسه را در Address Field وارد کنید و دلفی آدرس متغیر را برای شما حساب می کند و روش دوم اینست که برای آن متغییر یک Watch ایجاد کنید و سپس برای توقف اجرا در آن نقطه از یک Source Breakpoint استفاده کنید.

Module Load Breakpoints
اجرای برنامه را وقتی که کد ماژول بخصوصی بارگذاری می شود متوقف می کند. شما می توانید یک Module را در وضعیت Module Load Breakpoints تنظیم کنید. به اینصورت که بر روی یک Module معین کلیک راست نموده گزینه Break load را از Local Name انتخاب کنید.

Debugger Views
هنگامی که شما در حال Debug کردن یک برنامه هستید چند پنجره (یا View) وجود دارد که می توانیم آنها را باز کنیم و اجرای برنامه و وضعیت های آن را ببینید. این پنجره ها عبارتند از:

Breakpoints - Call Stack – Watches – Local Variables – Threads – Module – Event Log – CPU – FPU

برای فعال کردن این پنجره ها در IDE دلفی روی منوی Debug Windows View کلیک نمایید و سپس هر کدام را که می خواهید انتخاب نمایید.


تهیه و تنظیم: مهدی نقدی

Refrence:
http://www.marcocantu.com

Valadi
جمعه 12 بهمن 1386, 08:53 صبح
با سلام و تشکر آقای نقدی
این هم PDF مقاله آقای نقدی