krypt0nn/php-ndbg

PHP 5+ 库,用于创建具有原生支持且无需任何扩展的调试代码

0.1.0 2021-08-01 14:57 UTC

This package is auto-updated.

Last update: 2024-09-29 06:02:23 UTC


README

PHP Native Debug 是一个库,允许您从原始代码生成原生调试代码

安装

composer require krypt0nn/php-ndbg

工作原理

主要思想是在代码中变量的值发生变化的地方添加回调函数。例如

原始代码

<?php

$var = 10;

可调试代码

<?php

$var = 10;
var_changed ('var', 10);

并在代码上方某处定义函数 var_changed,例如

<?php

function var_changed ($name, $value)
{
    echo "$name = $value\n";
}

这样我们就可以看到代码中的某些变量是否发生了变化

用法

您可以在 test 目录中找到一个用法示例。在那里我们有 test_file.php,这是我们想要调试的文件。文件 test.php 将调用此文件的 Ndbg\Debugger::apply 方法,并将其保存为 test_file_applied.php,其中 debug_file.php 是包含调试回调的文件

此库只有一个方法:Ndbg\Debugger::apply(string $code, string $debug_file): string。其中,$code 是您想要调试的代码,$debug_file 是调试文件,当然,此函数将返回可调试的代码

调试文件具有以下结构

<?php

return function ($temp_name, $params)
{
    // this callback will be called when
    // debuggable script will start

    return function ($variable, $value, $params) use ($temp_name)
    {
        // this callback will be called every time
        // when some variable will be changed
    };
};

$temp_name 是一个参数,它包含一个临时名称,用作“空”变量值和 $GLOBALS 索引以存储调试器数据

$variable$value 是参数,它们告诉您变量的名称及其新值

$params 包含有关此回调被调用位置的某些信息的数组

[
    'globals'   => $GLOBALS,
    'line'      => __LINE__,
    'file'      => __FILE__,
    'function ' => __FUNCTION__,
    'class'     => __CLASS__,
    'method'    => __METHOD__,
    'namespace' => __NAMESPACE__
]

如果某个常量将包含空字符串作为其值(例如,回调是从没有类的函数中调用的,其中 __CLASS__ 将为空字符串) - 它将被替换为 null 值

因此,一个示例调试文件看起来像这样

<?php

return function ($temp_name, $params)
{
    echo 'Ran file '. $params['file'] . PHP_EOL;

    return function ($variable, $value, $params) use ($temp_name)
    {
        if ($params['function'] !== null)
            echo 'Ran function '. $params['function'] .
                 ' at line '. $params['line'] . PHP_EOL;
    };
};

作者:Nikita Podvirnyy