वापस नहीं करता है, मैं निम्नलिखित कॉल को हुक करने के लिए register_tick_function()
का उपयोग करना चाहता हूं और debug_backtrace()
के साथ अपने स्टैक ट्रेस को प्रिंट करना चाहता हूं।register_tick_function() द्वारा कॉल किया गया PHP debug_backtrace() पूर्ण स्टैक
यदि मैं निम्नलिखित कोड चलाता हूं।
<?php
function dump() {
// Replace this with var_dump(debug_backtrace()); to print the entire trace.
foreach (debug_backtrace() as $trace)
echo("Function ${trace['function']}() has been called" . PHP_EOL);
}
declare(ticks = 1);
register_tick_function('dump');
print("");
array_search('green', Array());
यह केवल dump()
फ़ंक्शन प्रिंट करता है।
Function dump() has been called
Function dump() has been called
Function dump() has been called
मैं क्यों print()
और array_search()
ट्रेस डेटा नहीं दिख रहा? ऐसा लगता है कि dump()
को आमंत्रित करने से पहले स्टैक को रीसेट कर दिया गया है। मुझे भी यकीन है कि यह अतीत में ठीक से काम करता है।
यह एक बग के रूप में एक जोड़ी साल पहले सूचना मिली थी, लेकिन तब प्रतिलिपि प्रस्तुत करने योग्य नहीं था: https://bugs.php.net/bug.php? आईडी = 70188 –
परीक्षण किया गया। विन, उबंटू, डॉकर (उबंटू) पर PHP 7.1 में दोहराने में असमर्थ। विन, उबंटू, डॉकर (उबंटू) पर PHP 5.6 में दोहराने में असमर्थ। –
मैंने इसे http://phpio.net/s/6v6g पर करने की कोशिश की, और ऐसा लगता है कि वहां किसी भी PHP संस्करण में काम नहीं है। तो इसे एक देखें: https://stackoverflow.com/questions/7241834/debug-backtrace-from-registered-shutdown-function-in-php। हालांकि वह register_shutdown_function के बारे में है, यह वही हो सकता है। ट्रेस केवल उस स्थान से शुरू हो सकता है जहां इसे कहा जा रहा है, जो इस मामले में नहीं हो रहा है। यह इस तरह है: 'प्रिंट (" ");' 'डंप();' 'array_search ('हरा', ऐरे());' 'डंप();' तो इस मामले में, यह वास्तव में खुद को ढूंढ रहा है क्योंकि इसे किसी और चीज से नहीं बुलाया जा रहा है। – Huy