আপনি কীভাবে পিএইচপি স্ক্রিপ্টগুলি ডিবাগ করবেন? [বন্ধ]


403

আপনি কীভাবে পিএইচপি স্ক্রিপ্টগুলি ডিবাগ করবেন ?

আমি ত্রুটি প্রতিবেদন ব্যবহারের মতো বেসিক ডিবাগিং সম্পর্কে সচেতন। পিএইচপিই ক্লিপসে ব্রেকপয়েন্ট ডিবাগিংও বেশ কার্যকর।

কি শ্রেষ্ঠ phpStorm বা অন্য কোন আইডিই মধ্যে ডিবাগ করার উপায় (দ্রুত এবং সহজ পরিপ্রেক্ষিতে)?


আরও দেখুন: stackoverflow.com/questions/4640421/...
kenorb


40
আমি বিশ্বাস করি এটি একটি দুর্দান্ত প্রশ্ন! আপনি যখন পিএইচপি ডিবাগিংয়ের কাছে যেতে জানেন না, তখন আপনি কীভাবে আপনার প্রশ্নটি শব্দটি বানাবেন তাও জানেন না, এর থেকে আরও কীভাবে সুনির্দিষ্ট হতে হবে তাও জানেন না। সুতরাং, এটি স্ট্যাকের নিয়মগুলি মানতে পারে না, তবে এটি নিশ্চিতভাবে আমাদের, নতুনদের, অনেক সাহায্য করে!
মিহেলা

1
পিএইচপি ৫.৪ এর পরে পিএইচপিডিবিজি ( পিএইচপিডিবিজি ডটকম ) নামে নতুন কমান্ড লাইন ইন্টারফেস ডিবাগার চালু করে । পিএইচপি 5.6 আসবে ডিফল্ট পিএইচপিডিবিজি সহ।
গণেশ পাতিল

1
এক্সডিবুগের কথা কখনও শুনেছেন? :)
প্রতীক

উত্তর:


145

আপনার উল্লিখিত মতো ডিবাগিং বৈশিষ্ট্য রয়েছে এমন একটি Elpipse পরিবেশ সেটআপ করতে Eclipse PDT ব্যবহার করে দেখুন । কোডে পদক্ষেপের ক্ষমতাটি ডিবাগ করার একটি আরও ভাল উপায় এবং তারপরে আপনার প্রবাহটি কোথায় ভুল হয়ে যায় তা দেখতে var_dump এর পুরানো পদ্ধতিটি বিভিন্ন পয়েন্টে মুদ্রণ করা। যখন সমস্ত কিছু ব্যর্থ হয় এবং আমার সমস্ত কিছু এসএসএইচ এবং ভিআইএম আমি এখনও var_dump()/ die()কোডটি দক্ষিণে কোথায় যায় তা খুঁজে পেতে।


35
আপনার এই ফাংশনটি ব্যবহার করা উচিত: কিল ($ ডেটা) {ডাই (var_dump ($ ডেটা)); } এটি 10 ​​টি অক্ষর টাইপ করা সংরক্ষণ করে, সেরা ফাংশন আমি
টিবিএইচ


2
"Var_dump" সুন্দর করার কোনও উপায় আছে?
আরপিডিজেস

6
@ অ্যালেক্সমোরলি-ফিঞ্চ আমি আপনাকে বাড়িয়েছিkill($data) { echo "<pre>"; var_dump($data); echo "</pre>"; exit; }
ফ্রান্সিসকো প্রেসেনসিয়া

2
অবিশ্বাস্য ওয়েব সংরক্ষণাগারটির মাধ্যমে লিঙ্কটি "পুনরুদ্ধারযোগ্য" , সর্বশেষ চেকটি may মে '15 এর হিসাবে।
গ্রুবার 21

80

আপনি জাভাস্ক্রিপ্টের মতো একই পরিবেশে পিএইচপি ডিবাগ করতে ফায়ারবাগ ফায়ারব্যাগের জন্য একটি অ্যাড-অন ব্যবহার করতে পারেন।

আমি পিএইচপি প্রোফাইল করার জন্য আগে উল্লিখিত এক্সডেবাগ ব্যবহার করি


3
: এবং এখানে FirePHP ব্যবহার একটি দ্রুত গাইড sitepoint.com/debug-php-firebug-firephp
Mihaela

38

এটি আমার ছোট ডিবাগ পরিবেশ:

error_reporting(-1);
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_BAIL, 0);
assert_options(ASSERT_QUIET_EVAL, 0);
assert_options(ASSERT_CALLBACK, 'assert_callcack');
set_error_handler('error_handler');
set_exception_handler('exception_handler');
register_shutdown_function('shutdown_handler');

function assert_callcack($file, $line, $message) {
    throw new Customizable_Exception($message, null, $file, $line);
}

function error_handler($errno, $error, $file, $line, $vars) {
    if ($errno === 0 || ($errno & error_reporting()) === 0) {
        return;
    }

    throw new Customizable_Exception($error, $errno, $file, $line);
}

function exception_handler(Exception $e) {
    // Do what ever!
    echo '<pre>', print_r($e, true), '</pre>';
    exit;
}

function shutdown_handler() {
    try {
        if (null !== $error = error_get_last()) {
            throw new Customizable_Exception($error['message'], $error['type'], $error['file'], $error['line']);
        }
    } catch (Exception $e) {
        exception_handler($e);
    }
}

class Customizable_Exception extends Exception {
    public function __construct($message = null, $code = null, $file = null, $line = null) {
        if ($code === null) {
            parent::__construct($message);
        } else {
            parent::__construct($message, $code);
        }
        if ($file !== null) {
            $this->file = $file;
        }
        if ($line !== null) {
            $this->line = $line;
        }
    }
}

2
ধন্যবাদ. এটা আমার দিন বাঁচিয়েছে। (আমাকে কেবল সেই E_STRICT সরিয়ে ফেলতে হবে)
সেক

4
assert_callcackহেহ
Madbreaks

32

এক্সডিবাগ এবং ডিবিজিপি প্লাগইন ভারী শুল্ক বাগ বাগানের জন্য নোটপ্যাড ++, হালকা ওজনের স্টাফের জন্য ফায়ারএইচপি। দ্রুত এবং ময়লা? কিছুই ডিবাগ মারছে না


ডিবিজিপি প্লাগইন নোটপ্যাড ++ / xdebug এর বর্তমান সংস্করণে কাজ করে না এবং এটি ঠিক করার কোনও পরিকল্পনা নেই। আপনি এখানে
জো

26

এক্সডিবেগ উন্নয়নের জন্য প্রয়োজনীয়। আমি অন্য কোনও এক্সটেনশনের আগে এটি ইনস্টল করেছি। এটি আপনাকে কোনও ত্রুটিতে স্ট্যাক ট্রেস দেয় এবং আপনি সহজেই প্রোফাইলিং সক্ষম করতে পারেন।

একটি ডাটা স্ট্রাকচার ব্যবহার এ দ্রুত বর্ণন জন্য var_dump()। ব্যবহার করবেন না print_r()কারণ আপনার চারপাশে এটি ঘিরে থাকতে হবে <pre>এবং এটি একবারে কেবল একটি বৈচিত্র মুদ্রণ করে।

<?php var_dump(__FILE__, __LINE__, $_REQUEST); ?>

একটি সত্যিকারের ডিবাগিং পরিবেশের জন্য আমি সবচেয়ে ভাল খুঁজে পেয়েছি হ'ল কমোডো আইডিই তবে এটির দাম $$


19

পিএইচপিইড সত্যিই ভাল। আপনি কার্য / আউট / আউট অফ আউট করতে পারেন। আপনি অ্যাড-হক কোড চালাতে পারেন, ভেরিয়েবলগুলি পরিদর্শন করতে পারেন, ভেরিয়েবলগুলি পরিবর্তন করতে পারেন। এটা অসাধারণ.


4
নেটবিয়ান বা অ্যাকলিপসের মতো বাস্তব আইডিইয়ের সাথে তুলনা করার সময় আমি পিএইচপিইড ব্যবহার করেছি এবং এর জন্য আমার কোনও ধরণের শব্দ নেই, বা এই মন্তব্যটি প্রশ্নের কোনও কার্যকর কিছু যোগ করে না। -1
সিলিকনরॉकস্টার

পিএইচপিইডি প্রফেশনাল কেনার আগে আমি বেশিরভাগ আইডিই (জেন্ড, নেটবিয়ানস এবং এক্সিলিপস সহ) চেষ্টা করেছিলাম কারণ এটি দেড় মাইলের মধ্যে সেরা ছিল। এটি কয়েক বছর আগে ছিল, সুতরাং অন্যরা তখন থেকে উন্নত হতে পারে তবে এগুলির বেশিরভাগ ব্যথা সহনীয়ভাবে ধীর ছিল কারণ সেগুলি জাভাতে লেখা হয়েছিল। আমি বুঝতে পারি না যে কারও কাছে "কীভাবে এর জন্য কোনও ধরনের শব্দ" থাকতে পারে না (যখন আমার পক্ষে) এটি সবচেয়ে স্পষ্টভাবে সর্বোত্তম ছিল, সিদ্ধান্তটি কোনও মস্তিষ্কে ছিল না।
lm713

17

1) আমি মুদ্রণ_আর () ব্যবহার করি। টেক্সটমেটে, আমার কাছে 'প্রাক' এর একটি স্নিপেট রয়েছে যা এটিতে প্রসারিত:

echo "<pre>";
print_r();
echo "</pre>";

2) আমি এক্সডিবুগ ব্যবহার করি, তবে জিইউআই আমার ম্যাকের সাথে সঠিকভাবে কাজ করতে সক্ষম হইনি। এটি কমপক্ষে স্ট্যাক ট্রেসের একটি পাঠযোগ্য সংস্করণ মুদ্রণ করে।


আমি নিশ্চিত আপনি প্রতিধ্বনি বোঝাচ্ছেন "</ translation>"; যদিও শেষে।
altermativ

9
আপনি ফাংশনটিতে 'সত্য'ও পাস করতে পারেন যাতে এটি স্ট্রিংটি ফেরত দেয়। এর অর্থ আপনি এটি করতে পারেন:echo '<pre>', print_r($var, true), '</pre>';
অসন্তুষ্টগোট


16

সমস্ত সততার সাথে, ভেরিয়েবলগুলি মুদ্রণের জন্য মুদ্রণ এবং মুদ্রণ_আর () এর সংমিশ্রণ। আমি জানি যে অনেকে অন্যান্য আরও উন্নত পদ্ধতি ব্যবহার করতে পছন্দ করেন তবে আমি এটি ব্যবহার করা সবচেয়ে সহজ বলে মনে করি।

আমি বলব যে আমি ইউনিতে কিছু মাইক্রোপ্রসেসর প্রোগ্রামিং না করা পর্যন্ত এটির পুরোপুরি প্রশংসা করি নি এবং এটি এমনকি ব্যবহার করতে সক্ষম না হয়েছি।


আমি আনন্দিত যে আপনি মুদ্রণের পাশাপাশি প্রিন্ট_আরের উল্লেখ করেছেন, কোডটি নির্দিষ্ট পয়েন্টে কার্যকর করা হয়েছে কিনা তা দেখার জন্য আমি একটি বেসিক প্রিন্ট ব্যবহার করি যা সমস্যাটি বিচ্ছিন্ন করতে সহায়তা করে।
ব্র্যাড

আমি মুদ্রণ এবং var_dump () উভয়ই ব্যবহার করি। আমি ডিবাগ বার্তাগুলি এবং তথ্য প্রদর্শন করতে মুদ্রণ ব্যবহার করি এবং জিনিসগুলির অগ্রগতি হিসাবে ভেরিয়েবলের অবস্থা নির্দেশ করতে var_dump।
জোশুয়া কে

14

Xdebug , Derick Rethans দ্বারা, খুব ভাল। আমি কিছু সময় আগে এটি ব্যবহার করেছিলাম এবং এটি ইনস্টল করা এত সহজ ছিল না। একবার হয়ে গেলে আপনি কীভাবে পরিচালনা করেছিলেন তা বুঝতে পারবেন না :-)

জেন্ড ডেভেলপার জোনে একটি ভাল নিবন্ধ আছে (লিনাক্সে ইনস্টল করা কোনও সহজ বলে মনে হয় না) এবং এমনকী একটি ফায়ারফক্স প্লাগইনও রয়েছে যা আমি কখনও ব্যবহার করি নি।


2
এটি কেবল হতাশার সাথে ইনস্টল করা নয়। এক্সডিবাগকে Eclipse এর সাথে কাজ করার জন্য কনফিগার করা দুঃস্বপ্ন হতে পারে। আমি সেন্টস 5 এ এক্সডিবেগ ইনস্টল করতে সক্ষম হয়েছি তবে এক্সপ্লাইপপিডিটি + এক্সদেবগ সহযোগিতা করতে চান না :(
জাহাঙ্গীর

11

আমি এক্সডিবুগ দিয়ে নেটবিয়ান ব্যবহার করি। এটি কীভাবে কনফিগার করতে হয় তার ডক্সের জন্য এটির ওয়েবসাইটে এটি পরীক্ষা করে দেখুন। http://php.netbeans.org/


11

আমি এক্সডিবেগ এবং ইজি এক্সডিবেগ ফায়ারফক্স অ্যাড-অনের সাহায্যে নেটবিন ব্যবহার করি

আপনি এমভিসি প্রকল্পগুলি ডিবাগ করার সময় অ্যাড-অন অপরিহার্য, কারণ নেটবিয়ানগুলিতে এক্সডিবগটি যেভাবে চালায় তা হ'ল ইউআরএল দিয়ে ডিবিগ সেশনটি নিবন্ধন করা। ফায়ারফক্সে অ্যাড-অন ইনস্টল করে, আপনি আপনার নেটবিয়ান প্রকল্পের বৈশিষ্ট্যগুলি নির্ধারণ করবেন -> কনফিগারেশন চালান -> উন্নত এবং "ওয়েব ব্রাউজার খুলবেন না" নির্বাচন করুন আপনি এখন আপনার ব্রেক পয়েন্ট সেট করতে পারেন এবং যথারীতি Ctrl-F5 দিয়ে ডিবাগিং সেশন শুরু করতে পারেন । ফায়ারফক্স খুলুন এবং ব্রেকপয়েন্টগুলির জন্য নজরদারি শুরু করতে ডান নীচের কোণায় অ্যাড-অন আইকনটিতে ডান ক্লিক করুন। কোডটি ব্রেকপয়েন্টে পৌঁছালে এটি থামবে এবং আপনি আপনার পরিবর্তনশীল রাজ্যগুলি এবং কল-স্ট্যাক পরিদর্শন করতে পারেন।


10

আপনি যদি নিজের আউটপুট গোলমাল করতে না চান তবে আউটপুট বাফারিং খুব কার্যকর। আমি এটি ওয়ান-লাইনারে করি যা আমি ইচ্ছামত মন্তব্য / অসন্তুষ্ট করতে পারি

 ob_start();var_dump(); user_error(ob_get_contents()); ob_get_clean();


9

পিএইচপিইডিটটিতে একটি বিল্ট ইন ডিবাগার রয়েছে তবে আমি সাধারণত ইকো () ব্যবহার করে শেষ করি; এবং মুদ্রণ_আর (); পুরানো কায়দায় !!


8

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


2
পিএইচপিইডি ডিবাগারটি একই ব্যক্তি লিখেছিলেন যিনি পিএইচপিইডি লিখেছিলেন এবং আমি নিশ্চিত যে এটি উন্মুক্ত উত্স নয়। কমপক্ষে পিএইচপিইড উত্স সহ শিপ করে না তবে পরিবর্তে। এস এর এবং .ডিএল এর সংকলন করেছে।
আর্টেম রাশাকোভস্কিই

4

ম্যানুয়াল ডিবাগিংটি আমার পক্ষে সাধারণত দ্রুত হয় - var_dump()এবং debug_print_backtrace()আপনার লজিককে বাহু দেওয়ার জন্য আপনার প্রয়োজনীয় সমস্ত সরঞ্জাম।


3

ঠিক আছে, কিছুটা দক্ষিণে জিনিসগুলি দক্ষিণে কোথায় চলছে তার উপর নির্ভর করে। এটি প্রথম জিনিসটি আমি আলাদা করার চেষ্টা করি এবং তারপরে আমি প্রয়োজনীয় হিসাবে প্রতিধ্বনি / মুদ্রণ_আর () ব্যবহার করব।

এনবি: আপনি ছেলেরা জানেন যে আপনি প্রিন্ট_আর () এর দ্বিতীয় যুক্তি হিসাবে সত্য পাস করতে পারেন এবং এটি মুদ্রণের পরিবর্তে আউটপুটটি ফিরে আসবে? উদাহরণ:

echo "<pre>".print_r($var, true)."</pre>";

2
আমি কেবল এটি ডিবাগ নামে একটি ফাংশনগুলিতে গুটিয়ে রাখি। তাহলে আমি ডিবাগ ($ var) করতে পারি;
jdelator

3

যখন প্রায়শই সম্ভব হয় না তখন আমি প্রায়শই কেকপিএইচপি ব্যবহার করি। ত্রুটিগুলি ডিবাগ করার জন্য আমি সাধারণত error.logটিএমপি ফোল্ডারটি খুঁজে পাই এবং কমান্ডটি দিয়ে টার্মিনালে এটি লেজ করি ...

tail -f app/tmp/logs/error.log

এটি আপনাকে যা চলছে তার পিষ্টক থেকে ডায়লগটি চালিয়ে যাচ্ছে যা বেশ কার্যকর, আপনি যদি এর মাঝের কোডটিতে কিছু ব্যবহার করতে চান তবে আপনি এটি ব্যবহার করতে পারেন।

$this->log('xxxx');

এটি সাধারণত কী ঘটছে / কী ঘটছে তার একটি ভাল ধারণা দিতে পারে।



2

কোমোডো আইডিই xdebug এর সাথে এমনকি রিমোর ডিবাগিংয়ের জন্যও ভাল কাজ করে। এটির জন্য সর্বনিম্ন পরিমাণ কনফিগারেশন প্রয়োজন। আপনার যা দরকার তা হ'ল পিএইচপি এর একটি সংস্করণ যা কোমোডো একটি ব্রেকপয়েন্টে কোডটি পদক্ষেপে স্থানীয়ভাবে ব্যবহার করতে পারেন। আপনার যদি স্ক্রিপ্টটি কমোডো প্রকল্পে আমদানি করা থাকে, তবে আপনি জাভা প্রোগ্রামটি ডিবাগ করার জন্য কীভাবে আপনি এটি গ্রহনের অভ্যন্তরে সেট করবেন ঠিক তার জন্য মাউস-ক্লিকের মাধ্যমে ব্রেকপয়েন্টগুলি সেট করতে পারেন। স্থানীয় ডিবাগিং সেটআপের তুলনায় রিমোট ডিবাগিং এটিকে সঠিকভাবে কাজ করা (আপনার ওয়ার্কস্পেসে পিএইচপি স্ক্রিপ্টের সাহায্যে রিমোট ইউআরএল মানচিত্র করতে হতে পারে) সম্ভবত আরও জটিল, আপনি ম্যাক বা লিনাক্স ডেস্কটপে থাকলে কনফিগার করা বেশ সহজ than ।



2

অনেকগুলি পিএইচপি ডিবাগিং কৌশল রয়েছে যা কোডিং করার সময় আপনাকে অসংখ্য ঘন্টা বাঁচাতে পারে। একটি কার্যকর তবে মৌলিক ডিবাগিং কৌশলটি কেবল ত্রুটি প্রতিবেদন চালু করা। আরেকটি সামান্য আরও উন্নত প্রযুক্তিতে মুদ্রণ বিবৃতি ব্যবহার করা জড়িত, যা স্ক্রিনে আসলে কী প্রদর্শিত হচ্ছে তা প্রদর্শন করে আরও অধরা বাগগুলি চিহ্নিত করতে সহায়তা করতে পারে। PHPeclipse একটি Elpipse પ્લગ-ইন যা সাধারণ বাক্য গঠন ত্রুটিগুলি হাইলাইট করতে পারে এবং ব্রেকপয়েন্টগুলি সেট করতে একটি ডিবাগারের সাথে একত্রে ব্যবহৃত হতে পারে can

display_errors = Off
error_reporting = E_ALL 
display_errors = On

এবং ব্যবহৃত

error_log();
console_log();

1

একটি উত্পাদন পরিবেশে, আমি ত্রুটি_লগ () দিয়ে সার্ভারের ত্রুটি লগের সাথে প্রাসঙ্গিক ডেটা লগ করি।


এবং পুচ্ছ-এর চেয়ে ... দুর্দান্ত কাজ করে
মার্কাস_পি

1

আমি বিল্ট ইন ডিবাগার সহ গ্রহনের জন্য জেন্ড স্টুডিও ব্যবহার করি। Xdebug এর সাথে গ্রহন পিডিটি-র সাথে ডিবাগিংয়ের তুলনায় এটি এখনও ধীর। আশা করি তারা এই সমস্যাগুলি সমাধান করবেন, সাম্প্রতিক প্রকাশের তুলনায় গতি উন্নত হয়েছে তবে এখনও জিনিসগুলির উপর পদক্ষেপ নিতে ২-৩ সেকেন্ড সময় লাগে। জেন্ডার ফায়ারফক্স সরঞ্জামদণ্ডটি সত্যই জিনিসগুলিকে সহজ করে তোলে (পরের পৃষ্ঠা, বর্তমান পৃষ্ঠা, ইত্যাদি ডিবাগ করুন)। এছাড়াও এটি এমন একটি প্রোফাইলার সরবরাহ করে যা আপনার কোডটিকে বেঞ্চমার্ক করবে এবং পাই-চার্ট, কার্যকরকরণের সময় ইত্যাদি সরবরাহ করবে


1

বেশিরভাগ বাগ সহজেই var_dumpকিছু কী ভেরিয়েবলের আইএন দিয়ে সহজেই পাওয়া যায় তবে এটি আপনি কী ধরণের অ্যাপ্লিকেশন বিকাশ করে তা নির্ভর করে।

আরও জটিল অ্যালগরিদমের জন্য পদক্ষেপ / ব্রেকপয়েন্ট / ওয়াচ ফাংশনগুলি খুব সহায়ক (যদি প্রয়োজন না হয়)


1

পিএইচপি ডিবিজি

ইন্টারেক্টিভ স্টেথথ্রু পিএইচপি ডিবাগার একটি এসএপিআই মডিউল হিসাবে প্রয়োগ করা হয়েছে যা আপনাকে আপনার কোডের কার্যকারিতা বা কার্যকারিতা প্রভাবিত না করে পরিবেশের উপরে সম্পূর্ণ নিয়ন্ত্রণ দিতে পারে। এটি পিএইচপি 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- এরর

DTrace

যদি আপনার সিস্টেমটি ডিট্রেস ডায়নামিক ট্রেসিং (ওএস এক্স-এ ডিফল্টরূপে ইনস্টল করা) সমর্থন করে এবং আপনার পিএইচপি যদি ডিট্রেস --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 এ

এখানে সহজ ব্যবহার:

  1. চালান: sudo dtruss-php.d
  2. অন্য টার্মিনাল রান অন: php -r "phpinfo();"

এটি পরীক্ষা করতে, আপনি index.phpপিএইচপি বিল্টইন সার্ভার সহ যে কোনও ডকরুটটিতে যেতে পারেন এবং এটি চালিয়ে যেতে পারেন :

php -S localhost:8080

এর পরে আপনি সাইটটি http: // লোকালহোস্ট: 8080 / এ অ্যাক্সেস করতে পারবেন (বা যে কোনও বন্দর আপনার পক্ষে সুবিধাজনক তা চয়ন করুন)। সেখান থেকে ট্রেস আউটপুট দেখতে কিছু পৃষ্ঠা অ্যাক্সেস করুন।

দ্রষ্টব্য: ডিট্রেস ডিফল্টরূপে ওএস এক্সে উপলভ্য, লিনাক্সে আপনার সম্ভবত সম্ভবত dtrace4linux প্রয়োজন বা অন্য কোনও বিকল্পের জন্য পরীক্ষা করুন ।

দেখুন: পিএইচপি এবং DTrace ব্যবহার php.net এ


SystemTap- র

বিকল্পভাবে সিস্টেমট্যাপ এসডিটি বিকাশ প্যাকেজ ইনস্টল করে সিস্টেমট্যাপ ট্রেসিংয়ের জন্য পরীক্ষা করুন (যেমন 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 এ


0

মুদ্রণ_আর () এর জন্য +1। কোনও অবজেক্ট বা ভেরিয়েবলের বিষয়বস্তু ফেলে দেওয়ার জন্য এটি ব্যবহার করুন। এটিকে আরও পঠনযোগ্য করার জন্য, এটি একটি প্রাক ট্যাগ দিয়ে করুন যাতে আপনার উত্স দেখার দরকার নেই।

echo '<pre>';
print_r($arrayOrObject);

এছাড়াও var_dump ($ জিনিস) - সাবস্ট্রিংয়ের ধরণটি দেখতে এটি খুব দরকারী


এখানে একটি প্রসারিত সংস্করণ পাওয়া যাবে devarticles.in/php/useful-function-to-output-debug-data-in-php
অরবিন্দ কে।


0

ইস্যুটির উপর নির্ভর করে আমি ইকো পরীক্ষার সাথে মিশ্রিত ত্রুটি_সামগ্রীকরণের (E_ALL) সংমিশ্রণ পছন্দ করি (আক্রমণাত্মক লাইন / ফাইলটি ত্রুটিটি প্রকৃত অর্থে ঘটেছে তা খুঁজে পেতে; আপনি জানেন যে এটি সর্বদা লাইন / ফাইল পিএইচপি আপনাকে সঠিকভাবে বলে না?), আইডিই ব্রেস ম্যাচিং ("পার্স ত্রুটি সমাধানের জন্য: সিনট্যাক্স ত্রুটি, অপ্রত্যাশিত শেষ" সমস্যাগুলি), এবং মুদ্রণ_আর (); থেকে প্রস্থান; ডাম্পস (প্রকৃত প্রোগ্রামাররা উত্সটি দেখেন; পি)।

আপনি "মেমরি_জেট_সেজ ()" দিয়ে পিএইচপিডিবাগ (চেক সোর্সফোর্জ) কেও মারতে পারবেন না; এবং "মেমোরি_গেট_পিক_উসেজ ();" সমস্যার ক্ষেত্রগুলি সন্ধান করতে।


0

সংহত ডিবাগারগুলি যেখানে আপনি কোডের মাধ্যমে পদক্ষেপ নেওয়ার সাথে সাথে পরিবর্তনশীল পরিবর্তনের মানগুলি দেখতে পারেন। তাদের অবশ্য সার্ভারে সফ্টওয়্যার সেটআপ এবং ক্লায়েন্টে একটি নির্দিষ্ট পরিমাণ কনফিগারেশন প্রয়োজন। উভয় ক্ষেত্রেই ভাল কাজের ক্রম বজায় রাখতে পর্যায়ক্রমিক রক্ষণাবেক্ষণ প্রয়োজন।

একটি মুদ্রণ_আর লেখা সহজ এবং যে কোনও সেটআপে কাজ করার গ্যারান্টিযুক্ত।


0

সাধারণত আমি একটি কাস্টম লগ ফাংশন তৈরি করতে পাই যাতে ফাইল সংরক্ষণ করতে সক্ষম হয়, ডিবাগের তথ্য সঞ্চয় হয় এবং শেষ পর্যন্ত একটি সাধারণ পাদলেখ পুনরায় মুদ্রণ করে।

আপনি সাধারণ ব্যাতিক্রম শ্রেণিকেও ওভাররাইড করতে পারেন, যাতে এই ধরণের ডিবাগিংটি আধা-স্বয়ংক্রিয় হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.