Xdebug: آموزش راه اندازی قابلیت Debugging در PHP

Xdebug: آموزش راه اندازی قابلیت Debugging در PHP

مقدمه: 

Debugging و وجود ابزارهای debugger در زبان های برنامه نویسی کامپایلی مانند java  یا c و ... یکی از مواردی است که گاهی اوقات به عنوان برتری و مزیت این زبان ها نسبت به زبان php مطرح می شود. ما در این مقاله می خواهیم ابزاری معرفی کنیم که علاوه بر این که به راحتی این قابلیت را به php اضافه می کند، افزونه ای به IDE های معروف مانند PHPStorm اضافه می کند تا به راحتی بتوان با این  ابزار کار کرد. 

Debugger چیست؟

برنامه ای نرم افزاری است که برای آزمایش و اشکال زدایی از برنامه های  هدف دیگر استفاده می شود. استفاده اصلی از Debugger، اجرای برنامه هدف در شرایط کنترل شده است که به برنامه نویس اجازه می دهد عملیات خود را در حال انجام، ردیابی کند و تغییرات منابع را کنترل کند تا متوجه سو عملکرد کد خود بشود.

امکانات معمول Debugger ها شامل: 

  • توانایی اجرا یا متوقف کردن برنامه هدف در نقاط خاص
  • نمایش محتویات حافظه، رجیسترهای CPU یا دستگاه های ذخیره سازی (مانند درایوهای دیسک) 
  • تغییر حافظه در زمان اجرا
  • ثبت داده های آزمایشی خاص که ممکن است دلیل اجرای نادرست برنامه باشد.

Xdebug چیست؟ 

یک افزونه ی PHP است که با استفاده از آن می توان قابلیت های Debugging  را در PHP نیز داشت. این افزونه بر اساس پروتکل DBGp نوشته شده است که در آن قابلیت های زیر به صورت خاص دیده می شود: 

  • می توان به صورت قدم به قدم در IDE کد را بررسی و پیش برد.
  • از روش های مرسوم و ناقص بررسی خروجی ها و دیباگ کدهای php مانند var_dump یا die دوری کرد.
  • به راحتی می توان عملکرد یک متد و و ورودی و خروجی های آن را کنترل کرد.
  • می توان عملکرد برنامه ی خود در یک سیستم عامل یا پلتفرم بررسی کرد و گلوگاه های برنامه را یافت.
  • در تعامل با PHPUnit می تواند پوشش دهی کد در تست نرم افزار را مشخص کند.

در این مقاله می خواهیم به نصب این افزونه روی php و phpstorm  و chrome  بپردازیم. به صورتی که بتوانیم کد های remote یک برنامه ی php  به کمک SSH Tunnel در PHPStorm را دیباگ کنیم.

در این آموزش از موارد زیر استفاده شده است:

  • PHP: v7.3
  • Debian: v10
  • Xdebug: v2.7

نصب Xdebug در سرور

با فرض اینکه php نسخه 7.3 در debian نسخه 10 نصب است با دستور زیر xdebug را نصب کنید:

$ apt install php-xdebug

سپس تنظیمات زیر را در فایل etc/php/7.3/mods-available/xdebug.ini/ بنویسید:

zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_autostart=1
xdebug.idekey="PHPSTORM"

برای اطمینان از نصب  xdebug می توان دستور زیر را اجرا کرد:

$ php --version

در صورتی که خروجی مانند پایین باشد به معنای نصب بودن xdebug است:

در نهایت  apache را restart کنید:

 $ systemctl restart apache2

تنظیم PHPStorm در local

تا این مرحله xdebug بر رروی سرور شما نصب شد حال نیاز است تنظیمات مربوط به IDE خود را انجام دهید .در اینجا ما مراحل نصب را برای PHPStorm  انجام می دهیم. بعد از آن برنامه ی خود را پیاده سازی کرده اید و همچنین روی سرور خود استقرار کرده اید اگر مراحل Deployment را از phpstorm  انجام نداده اید پس نیاز است در ابتدا  در قسمت  Deployment یک ارتباط sftp با سرور برقرار کنیم. به همین خاطر به این مسیر بروید Tools | Deployment | Configuration و در پنجره ی باز شده دکمه + را بزنید و مانند شکل زیر یک ارتباط SFTP برقرار کنید. دقت کنید که Root path و mapping باید مشخص شده باشند به صورتی که فایل های پروژه ی شما روی local با فایل های پروژه روی سرور باید کاملا مسیرهای map شده به هم دیگر داشته باشند.

سپس به مسیر Setting | Languages And Frameworks | PHP بروید:

روبروی CLI Interpreter گزینه را انتخاب کنید و در صفحه ی باز شده گزینه + را زده و روی From Docker,...,Remote کلیک کنید:

گزینه Deployment and configuration را انتخاب کنید و در قسمت Deployment configuration تنظیمات deployment که در مرحله ی قبل ایجاد کردیم را (ما در اینجا با اسم  remote ساخته ایم) انتخاب کنید، در قسمت PHP interpreter path باید مسیر فایل اجرایی php در سرورتان را مشخص کنید که به صورت پیش فرض در مسیر usr/bin/php/ قرار دارد و معمولا اگر تنظیمات سرور را تغییر نداده باشید، نیاز به تغییر نیست.

در این قسمت هم فعال بودن Xdebug (همانند تصویر) باید گفته شده باشد.

بعد از تایید نهایی تنظیمات php مانند شکل زیر می شود:

توجه داشته باشین که در قسمت Setting | Languages And Frameworks | PHP | Debug 

حتما port برابر با 9000 باشد:

نصب chrome extension

ساده ترین روش برای آماده سازی مرورگر استفاده از extension به نام Xdebug helper است که لینک مربوط به chrome آن در ادامه آمده است:

https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc?hl=en

بعد از نصب برای استفاده باید گزینه debug را انتخاب کنید که در نتیجه آیکون آن سبز می شود. اگر IDE که استفاده می کنید  PHPStorm است باید در قسمت تنظیمات افزونه آن را مشخص کنید:

برقراری ارتباط Tunnel

برای اینکه بتوانیم کدهای remote را در local دیباگ کنیم بایستی یک ارتباط tunnel از طریق SSH برقرار کنیم که تمام درخواست هایی که به پورت ۹۰۰۰ remote ارسال می شود به پورت ۹۰۰۰ در Local منتقل شود و ما در Local از نتیجه ی دیباگ با خبر شویم. برای ایجاد این tunnel به کمک نرم افزار ابتدا putty آی پی سرور خود را وارد کنید:

سپس به مسیر  Connection | SSH | Tunnels بروید و مانند شکل زیر این ارتباط را برقرار کنید:

بعد از زدن گزینه open و وارد کردن اطلاعات احراز هویت سرور شما این ارتباط tunnel برقرار می شود.

در نهایت باید در phpstorm گزینه listening for PHP Debug Connection را start کنید برای این کار به قسمت Setting | Languages And Frameworks | PHP| Debug رفته و همانند شکل زیر این گزینه را فعال کنید:

در صورتی که همه مراحل به درستی انجام شده باشند و در کد breakpoint قرار داده باشین بعد از درخواست http گزینه debug مانند شکل زیر نمایان می شود:

مثال

در ادامه با یک مثال که فرم ثبت نام است برخی از قابلیت های Xdebug را بیان می کنیم:

که action آن در controller به صورت زیر پیاده سازی شده است:

در دو نقطه breakpoint گذاشته ایم. کد نقطه اول متوقف می شود و پنجره debug به این صورت نمایان می شود:

در قسمت frame می توانیم stack trace برنامه را مشاهده کنیم و در قسمت variable متغیر ها قابل مشاهده است. 

با زدن دکمه F7 ادامه کد اجرا می شود در صورتی که تابعی داشته باشیم debug به داخل آن متدها نیز می رود. برای مثال در ادامه این کد متد input را داریم اگر F7 بزنیم کدهای داخلی متد input نیز بررسی می شود. در صورتی که نیاز نیست به داخل کد توابع برویم می توانیم از دکمه F8 استفاده کنیم. Shift + F8 باعث می شود کد تا breakpoint بعدی ادامه پیدا کند. در صورتی که خط خاصی برای debug مد نظر هست می توانیم cursor را در آن خط قرار دهیم سپس alt + F9 را بزنیم تا کد تا آن خط ادامه پیدا کند.

قسمت variable می تواند بسیار بزرگ شود. در صورتی که متغیر خاصی مد نظر هست می توانیم آن را به watches اضافه کنیم تا همواره مقدار آن را در حین debug مشاهده کنیم. برای این کار قسمت مشخص شده کلیک کنید سپس با زدن دکمه + می توانیم متغیر خود را اضافه کنیم:

در حین debug کردن کد می توانیم یک تکه کد نیز اجرا کنیم برای این کار alt + F8 را می‌زنیم و در پنجره ظاهر شده کد مد نظر را اجرا می کنیم:

در این مقاله با قابلیت های debugger مخصوص به php که Xdebug نام داشت آشنا شدید برای اینکه بیشتر با این افزونه آشنا شوید می توانید به مستندها اصلی آن مراجعه کنید:

 https://xdebug.org/docs

از بهترین نوشته‌های کاربران سکان آکادمی در سکان پلاس


online-support-icon