- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想使用 register_tick_function()
Hook 以下调用并使用 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()
之前堆栈已被重置。我也很确定它在过去工作正常。
最佳答案
你误解了什么是回溯,这个堆栈不是 PHP 在到达特定代码行之前执行的函数列表,而是证明 PHP 解释器位于特定代码行的嵌套函数列表。
第一个元素始终是您当前所在的函数,下一个元素是调用该函数的函数,依此类推。如果函数返回,则它不再在堆栈中。
class Foo {
public static function bar() {
return self::say();
}
public static function say() {
return debug_backtrace();
}
}
var_dump(Foo::say());
//[0] => say()
var_dump(Foo::bar());
//[0] => say();
//[1] => bar();
//Note that this behaviour work the same for require(), include() and eval()
require_once('test.php');
//test.php:
var_dump(debug_backtrace());
//[0] => require_once()
当 PHP 解释您的脚本时,它会导航您的函数,在当前堆栈中添加和删除。回溯堆栈不是 PHP 记录按时间顺序调用的函数的地方。
对于后者,这是我找到的解决方案:Get a called functions list in PHP
关于register_tick_function() 调用的 PHP debug_backtrace() 不返回完整堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48041926/
试图理解 debug_backtrace 上的 php 手册中的这个条目. 我不明白他们所说的“这个参数是……的位掩码”是什么意思 我已经对位掩码进行了网络搜索,但我的头一直在转,所以我决定我真的不想
在这个缩短的例子中: print_r($foo); Array ( [0] => Array ( [function] => exception_han
如何在 PHP 5.2.11 中禁用提供 debug_backtrace 的对象? debug_backtrace(false) 不起作用。 提前致谢, 西蒙 最佳答案 已经很晚了,但我想回答这个问题
我发现有时debug_backtrace()不包含调用的行号。这有什么原因吗?有什么方法可以纠正它吗? 提前致谢。 附注是的,省略行号的调用是我自己的代码,而不是内部 PHP 代码。 最佳答案 考虑以
当尝试跟踪 PHP 中的一些内存问题时,我注意到我在日志记录代码中调用的 debug_backtrace() 似乎占用了大量内存。 在大多数情况下,以下代码会打印类似 0.02 MB 的内容。但在一种
它的功能太强大了,我担心它的稳定性和性能。 你怎么看? 更新 我正在做的是: $old_dir = getcwd(); chdir( dirname($included_file) )
目前,我有一个记录器,它记录错误和回溯。记录器通过 json_encode() 将回溯序列化为 JSON。 让我们看一些假设的代码... 如果你run the code above ,我们会看到类似
是否有令人信服的理由不使用 debug_backtrace仅仅为了确定调用方法的类、名称和参数列表?不用于调试目的。它的函数名称中有“调试”一词,这让我觉得以这种方式使用它有点脏,但它符合我需要做的事
在处理我的一个 PHP 时项目我有一个函数debug_backtrace()在代码文件的开头为 . 在研究它时,我得到了一些解释,它的工作原理是: Debugging PHP issues in a
我想使用 register_tick_function() Hook 以下调用并使用 debug_backtrace() 打印它们的堆栈跟踪。 如果我运行下面的代码。 say() var_dump(
在修补 this question 的答案时,我发现 debug_backtrace() 不会跟踪超出注册到 register_shutdown_function() 的函数,当从其中调用时。 这在
我为我的网站编写了一个错误处理程序,如下所示: function errorHandler($number, $string, $file, $line, $context, $type = '')
我是一名优秀的程序员,十分优秀!