krypt0nn/php-ndbg
PHP 5+ 库,用于创建具有原生支持且无需任何扩展的调试代码
0.1.0
2021-08-01 14:57 UTC
Requires
- php: >=5.3
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; }; };