PHP 7.4中的PHP代码
这段代码的一部分是一个顶级的PHP脚本(/home/path/a.php),其中包含一堆try catch块,并包含对对象和包含文件的各种调用。
这些try/catch块抛出客户错误和运行时错误等。
在throw中有一个错误日志,其中包含错误日志的debug_backtrace()
打印。
// some code
use some/path/to/objects;
$database = new Database();
include "some/file/reference.php";
try {
// various things including $_SESSION data
if (empty($_SESSION['b']) || empty($_POST['d'])) {
if(empty($_SESSION['b'])) {
error_log("session appears empty. No b");
}
if(empty($_POST['d'])) {
error_log("POST appears empty. No d");
}
throw new RuntimeException('Incorrect validation/form details given.');
}
}
catch (RuntimeException | Exception $ex) {
error_log("Login Page: ".$_SESSION['message']);
error_log("debug: ".print_r(debug_backtrace(),true));
}
字符串
然而,这段代码正确地运行并收集了错误,但错误日志只显示了以下内容:
[31-Jul-2023 18:42:17 Europe/伦敦]来自$_SESSION ['message']的一些自定义反馈消息
[31-Jul-2023 18:42:17欧洲/伦敦]阵列
(
)
为什么这里的Debug_backtrace()
是空的?我希望它至少显示参数和变量的页面,或会话数据或环境数据?
我在其他地方使用过这种方法,它(据我回忆)工作正常。我错过了什么?
1条答案
按热度按时间t3irkdon1#
debug_backtrace()
提供了一个调用堆栈,它将你带到了你所在的位置,但是你已经在最外面的(即全局)范围内,而且你还没有进行任何调用,所以没有调用堆栈。字符串
产量:
型
如果你把代码放在一个函数中,你会得到一个只有一项的调用堆栈:
型
产量:
型
如果你在全局范围内需要一些(最小的)调试信息,你可以将所有代码 Package 在一个闭包中,然后立即调用该内联:
型
产量:
型
关于session/environment数据,只有当你将它们作为参数传递时,它才会显示这些内容:
型
产量:
型
如果你想像这样记录会话/环境变量,你最好显式地转储它们:
型