Лучший способ сделать отступ для записей функций

У меня есть следующий скрипт dtrace:

#!/usr/sbin/dtrace -Zs
#pragma D option quiet
php*:::function-entry {
printf("%Y: PHP function-entry :%*s%s %s%s%s() in %s:%d\n", walltimestamp, ++indent, "", "->", copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}

php*:::function-return {
printf("%Y: PHP function-return:%*s%s %s%s%s() in %s:%d\n", walltimestamp, indent--, "", "<-", copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}

который, кажется, работает для простого кода PHP, такого как:

<?php
function a() { b(); }
function b() { c(); }
function c() { d(); }
function d() { e(); }
function e() { }
a();

например:

$ sudo ./trace-php.d
2016 Apr  9 01:41:29: PHP function-entry : -> a() in foo.php:2
2016 Apr  9 01:41:29: PHP function-entry :  -> b() in foo.php:3
2016 Apr  9 01:41:29: PHP function-entry :   -> c() in foo.php:4
2016 Apr  9 01:41:29: PHP function-entry :    -> d() in foo.php:5
2016 Apr  9 01:41:29: PHP function-entry :     -> e() in foo.php:6
2016 Apr  9 01:41:29: PHP function-return:     <- e() in foo.php:6
2016 Apr  9 01:41:29: PHP function-return:    <- d() in foo.php:5
2016 Apr  9 01:41:29: PHP function-return:   <- c() in foo.php:4
2016 Apr  9 01:41:29: PHP function-return:  <- b() in foo.php:3
2016 Apr  9 01:41:29: PHP function-return: <- a() in foo.php:2

Однако, когда я тестирую его с помощью более сложных сценариев, например, Бег drush status, php index.php (на сайте Drupal), или используя встроенный PHP-сервер, он уходит с экрана на следующую строку и еще одну и не возвращается в то же место, поэтому через несколько минут у меня несколько сотен (даже тысяч) космические символы. И это не возможно, что код идет так глубоко, так как я xdebug.max_nesting_level=256 что предотвращает слишком глубокую рекурсию.

Что вызвало сбой вышеуказанной логики и как ее можно улучшить?

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]