Aşağıdaki çağrıları kancalamak ve debug_backtrace()
ile yığın izlerini yazdırmak için register_tick_function()
kullanmak istiyorum. Aşağıdaki kodu çalıştırırsamPHP debug_backtrace() tarafından çağrılan register_tick_function() tüm yığınını döndürmez
.
<?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());
Yalnızca dump()
işlevini yazdırır.
Function dump() has been called
Function dump() has been called
Function dump() has been called
Neden
print()
ve
array_search()
iz veri göremiyorum?
dump()
'u çağırmadan önce yığının sıfırlanması gibi. Ayrıca geçmişte düzgün çalıştığından da eminim.
: https://bugs.php.net/bug.php? id = 70188 –
Test edildi. Win, Ubuntu, docker (ubuntu) PHP 7.1'de kopyalanamadı. Win, Ubuntu, docker (ubuntu) PHP 5.6'da kopyalanamadı. –
Bunu http://phpio.net/s/6v6g adresinde denedim ve herhangi bir PHP sürümünde de çalışmıyor gibi görünüyor. Bunu görelim: https://stackoverflow.com/questions/7241834/debug-backtrace-from-registered-shutdown-function-in-php. Bu bir register_shutdown_function hakkında olsa da, aynı olabilir. İz, yalnızca, aranmakta olduğu yerden başlayabilir, bu durumda gerçekleşmeyebilir. Daha fazla: 'print (" "); ' dump(); ' ' array_search ('yeşil', Array()); ' ' dump(); ' Yani bu durumda, gerçekten başka bir şeyin içinden çağrılmadığı için kendini izliyor. – Huy