ইন্টারেক্টিভ স্টেথথ্রু পিএইচপি ডিবাগার একটি এসএপিআই মডিউল হিসাবে প্রয়োগ করা হয়েছে যা আপনাকে আপনার কোডের কার্যকারিতা বা কার্যকারিতা প্রভাবিত না করে পরিবেশের উপরে সম্পূর্ণ নিয়ন্ত্রণ দিতে পারে। এটি পিএইচপি 5.4+ এর জন্য একটি হালকা, শক্তিশালী, সহজেই ডিবাগিং প্ল্যাটফর্ম হতে লক্ষ্য করে এবং এটি পিএইচপি 5.6 এর সাথে বাইরের বাইরে পাঠানো হয়।
বৈশিষ্ট্যগুলির মধ্যে রয়েছে:
- ধাপে ডিবাগিং
- নমনীয় ব্রেকপয়েন্টস (শ্রেণি পদ্ধতি, ফাংশন, ফাইল: লাইন, ঠিকানা, অপকোড)
- বিল্ট-ইন ইওল () এর সাথে পিএইচপি-তে সহজে অ্যাক্সেস
- বর্তমানে সম্পাদনকারী কোডটিতে সহজ অ্যাক্সেস
- ইউজারল্যান্ড এপিআই
- এসএপিআই অগ্নোস্টিক - সহজেই সংহত
- পিএইচপি কনফিগারেশন ফাইল সমর্থন
- জেআইটি সুপার গ্লোবালস - আপনার নিজের সেট করুন !!
- Readচ্ছিক রিডলাইন সমর্থন - আরামদায়ক টার্মিনাল অপারেশন
- রিমোট ডিবাগিং সহায়তা - বান্ডিলযুক্ত জাভা জিইউআই
- সহজ অপারেশন
স্ক্রিনশটগুলি দেখুন:


হোম পৃষ্ঠা: http://phpdbg.com/
পিএইচপি ত্রুটি - পিএইচপি জন্য ভাল ত্রুটি রিপোর্ট
আপনার পিএইচপি স্ক্রিপ্টগুলি ডিবাগ করার জন্য লাইব্রেরি (আসলে একটি ফাইল) ব্যবহার করা খুব সহজ।
কেবলমাত্র আপনাকে যা করতে হবে তা হ'ল নীচের মতো একটি ফাইল অন্তর্ভুক্ত করা (আপনার কোডের শুরুতে):
require('php_error.php');
\php_error\reportErrors();
তারপরে সমস্ত ত্রুটি আপনাকে তথ্য প্রদান করবে যেমন ব্যাকট্র্যাস, কোড প্রসঙ্গ, ফাংশন আর্গুমেন্ট, সার্ভার ভেরিয়েবল ইত্যাদি example উদাহরণস্বরূপ:

বৈশিষ্ট্য অন্তর্ভুক্ত:
- তুচ্ছ ব্যবহার করার জন্য, এটি কেবল একটি ফাইল
- স্বাভাবিক এবং আজাক্সি অনুরোধগুলির জন্য ব্রাউজারে ত্রুটিগুলি প্রদর্শিত হয়
- AJAX অনুরোধগুলি বিরতি দেওয়া হয়েছে, আপনাকে সেগুলি স্বয়ংক্রিয়ভাবে পুনরায় চালানোর অনুমতি দেয়
- ত্রুটিগুলি যথাসম্ভব কঠোর করে তোলে (কোডের গুণমানকে উত্সাহ দেয় এবং কার্য সম্পাদনকে উন্নত করে)
- পুরো স্ট্যাক ট্রেস জুড়ে কোড স্নিপেট
- আরও তথ্য সরবরাহ করে (যেমন সম্পূর্ণ ফাংশন স্বাক্ষর)
- কিছু ত্রুটি বার্তা সংশোধন করে যা কেবল সাধারণ ভুল plain
- বাক্য গঠন হাইলাইট
- দেখতে সুন্দর!
- স্বনির্ধারণ
- ম্যানুয়ালি এটি চালু এবং বন্ধ করুন
- ত্রুটি রিপোর্ট না করে নির্দিষ্ট বিভাগগুলি চালান
- আপনার স্ট্যাক ট্রেসে হাইলাইট কোডটি এড়াতে দেয় এমন ফাইলগুলিকে উপেক্ষা করুন
- অ্যাপ্লিকেশন ফাইল; এগুলিকে অগ্রাধিকার দেওয়া হয় যখন কোনও ত্রুটি ঘটে!
হোম পৃষ্ঠা: http://phperror.net/
গিটহাব: https://github.com/JosephLenton/PHP- এরর
আমার কাঁটাচামচ (অতিরিক্ত ফিক্স সহ): https://github.com/kenorb-contrib/PHP- এরর
যদি আপনার সিস্টেমটি ডিট্রেস ডায়নামিক ট্রেসিং (ওএস এক্স-এ ডিফল্টরূপে ইনস্টল করা) সমর্থন করে এবং আপনার পিএইচপি যদি ডিট্রেস --enable-dtrace
হওয়া উচিত এটি ডিট্রেস প্রোবগুলি সক্ষম করে ( ) সংকলিত হয় , তবে এই কমান্ড আপনাকে পিএইচপি স্ক্রিপ্টকে বিনাশ্রমে ডিবাগ করতে সহায়তা করতে পারে:
sudo dtrace -qn 'php*:::function-entry { printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }'
সুতরাং নীচে দেওয়া উপনামটি আপনার আরসি ফাইলগুলিতে যুক্ত করা হয়েছে (যেমন ~/.bashrc
, ~/.bash_aliases
):
alias trace-php='sudo dtrace -qn "php*:::function-entry { printf(\"%Y: PHP function-entry:\t%s%s%s() in %s:%d\n\", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }"'
আপনি ওরফে মনে রাখা সহজ সঙ্গে আপনার স্ক্রিপ্ট ট্রেস করতে পারেন: trace-php
।
এখানে আরও উন্নত ডিট্রেস স্ক্রিপ্ট রয়েছে, কেবল এটির মধ্যে সংরক্ষণ করুন dtruss-php.d
, এটি সম্পাদনযোগ্য ( chmod +x dtruss-php.d
) তৈরি করুন এবং চালনা করুন:
#!/usr/sbin/dtrace -Zs
# See: https://github.com/kenorb/dtruss-lamp/blob/master/dtruss-php.d
#pragma D option quiet
php*:::compile-file-entry
{
printf("%Y: PHP compile-file-entry:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1));
}
php*:::compile-file-return
{
printf("%Y: PHP compile-file-return:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), basename(copyinstr(arg1)));
}
php*:::error
{
printf("%Y: PHP error message:\t%s in %s:%d\n", walltimestamp, copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}
php*:::exception-caught
{
printf("%Y: PHP exception-caught:\t%s\n", walltimestamp, copyinstr(arg0));
}
php*:::exception-thrown
{
printf("%Y: PHP exception-thrown:\t%s\n", walltimestamp, copyinstr(arg0));
}
php*:::execute-entry
{
printf("%Y: PHP execute-entry:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}
php*:::execute-return
{
printf("%Y: PHP execute-return:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}
php*:::function-entry
{
printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}
php*:::function-return
{
printf("%Y: PHP function-return:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}
php*:::request-shutdown
{
printf("%Y: PHP request-shutdown:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}
php*:::request-startup
{
printf("%Y, PHP request-startup:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}
প্রথম পাতা: dtruss-বাতি GitHub এ
এখানে সহজ ব্যবহার:
- চালান:
sudo dtruss-php.d
।
- অন্য টার্মিনাল রান অন:
php -r "phpinfo();"
।
এটি পরীক্ষা করতে, আপনি index.php
পিএইচপি বিল্টইন সার্ভার সহ যে কোনও ডকরুটটিতে যেতে পারেন এবং এটি চালিয়ে যেতে পারেন :
php -S localhost:8080
এর পরে আপনি সাইটটি http: // লোকালহোস্ট: 8080 / এ অ্যাক্সেস করতে পারবেন (বা যে কোনও বন্দর আপনার পক্ষে সুবিধাজনক তা চয়ন করুন)। সেখান থেকে ট্রেস আউটপুট দেখতে কিছু পৃষ্ঠা অ্যাক্সেস করুন।
দ্রষ্টব্য: ডিট্রেস ডিফল্টরূপে ওএস এক্সে উপলভ্য, লিনাক্সে আপনার সম্ভবত সম্ভবত dtrace4linux প্রয়োজন বা অন্য কোনও বিকল্পের জন্য পরীক্ষা করুন ।
দেখুন: পিএইচপি এবং DTrace ব্যবহার php.net এ
বিকল্পভাবে সিস্টেমট্যাপ এসডিটি বিকাশ প্যাকেজ ইনস্টল করে সিস্টেমট্যাপ ট্রেসিংয়ের জন্য পরীক্ষা করুন (যেমন yum install systemtap-sdt-devel
)।
all_probes.stp
সিস্টেমটিপ সহ চলমান পিএইচপি স্ক্রিপ্টের পুরো সময়কালে সমস্ত মূল পিএইচপি স্থিতিশীল প্রোব পয়েন্টগুলি ট্রেস করার জন্য এখানে স্ক্রিপ্ট ( ) উদাহরণটি রয়েছে :
probe process("sapi/cli/php").provider("php").mark("compile__file__entry") {
printf("Probe compile__file__entry\n");
printf(" compile_file %s\n", user_string($arg1));
printf(" compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("compile__file__return") {
printf("Probe compile__file__return\n");
printf(" compile_file %s\n", user_string($arg1));
printf(" compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("error") {
printf("Probe error\n");
printf(" errormsg %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
}
probe process("sapi/cli/php").provider("php").mark("exception__caught") {
printf("Probe exception__caught\n");
printf(" classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("exception__thrown") {
printf("Probe exception__thrown\n");
printf(" classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("execute__entry") {
printf("Probe execute__entry\n");
printf(" request_file %s\n", user_string($arg1));
printf(" lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("execute__return") {
printf("Probe execute__return\n");
printf(" request_file %s\n", user_string($arg1));
printf(" lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("function__entry") {
printf("Probe function__entry\n");
printf(" function_name %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
printf(" classname %s\n", user_string($arg4));
printf(" scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("function__return") {
printf("Probe function__return: %s\n", user_string($arg1));
printf(" function_name %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
printf(" classname %s\n", user_string($arg4));
printf(" scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("request__shutdown") {
printf("Probe request__shutdown\n");
printf(" file %s\n", user_string($arg1));
printf(" request_uri %s\n", user_string($arg2));
printf(" request_method %s\n", user_string($arg3));
}
probe process("sapi/cli/php").provider("php").mark("request__startup") {
printf("Probe request__startup\n");
printf(" file %s\n", user_string($arg1));
printf(" request_uri %s\n", user_string($arg2));
printf(" request_method %s\n", user_string($arg3));
}
ব্যবহার:
stap -c 'sapi/cli/php test.php' all_probes.stp
দেখুন: পিএইচপি DTrace স্ট্যাটিক প্রোব সঙ্গে SystemTap ব্যবহারের প্রণালী php.net এ