【问题标题】:PHP missing function arguments in exception stack tracePHP 在异常堆栈跟踪中缺少函数参数
【发布时间】:2020-05-16 22:00:02
【问题描述】:

我正在为我的 php 应用程序开发我自己的错误处理程序,我需要向开发服务器上的用户发送一个漂亮的异常报告。 因此,当它捕获到异常时,它必须解析异常堆栈跟踪以显示函数、行参数等。 但是,我在函数调用中没有参数了

我认为这是由 XDebug 引起的,我尝试更改 xdebug.collect_params 的值来修复它,但没有成功。 事实上,这个配置只是改变了现在有函数调用参数的xdebug默认报告的显示。

我做了一个测试脚本来测试它,让你看看。

<?php
$config = 'xdebug.collect_params';
echo "Current value of $config is<br />\n";
var_dump(ini_get($config));

ini_set($config, 3);

function fallDeepToHell($param) {
    echo 'Param is : ' . $param . "<br>\n";
    throw new Exception();
}

try {
    fallDeepToHell('from heaven');
} catch(Exception $e) {
    var_dump($e->getTrace());
    var_dump($e->getTraceAsString());
}
fallDeepToHell('from heaven');

我的开发服务器上的结果是

我正在使用带有 FPM 的 PHP 7.4。

我的 php.ini 更改:

max_execution_time = 30
memory_limit = 128M
error_reporting = E_ALL
display_errors = On
display_startup_errors = On
html_errors = On
post_max_size = 100M
upload_max_filesize = 49M
date.timezone = Europe/Paris

;[mail function]
mail.add_x_header = On

;[Session]
session.gc_divisor = 1000
session.gc_maxlifetime = 43200

我的 XDebug 设置仅与远程事物有关。

【问题讨论】:

  • 你在最后再次调用fallDeepToHell('from heaven');,没有一个try / catch块。这会引发一个未捕获的异常。最好是从下到上阅读回溯。您会看到它被从 main() 调用的第 22 行所占用。
  • 我无法重现这一点,而且我总是看到这些参数——无论是否加载了 Xdebug。您正在运行哪个版本的 Xdebug?如果您不在 2.9.1 上,则应该升级。
  • @Derick 我正在使用 Xdebug v2.9.1 和 PHP FPM 7.4
  • 我再次尝试使用这些版本,但它有效。你介意分享你的 phpinfo() 输出吗?或者,如果可能,提供显示此错误行为的 docker 设置?
  • 这里是我的phpinfopastebin.com/HtRtaqnJ的html

标签: php exception xdebug


【解决方案1】:

我也遇到了同样的问题,原来是新的zend.exception_ignore_argsINI指令introduced in PHP 7.4

zend.exception_ignore_args 是一个新的 INI 指令,用于包含或 从异常生成的堆栈跟踪中排除参数。

【讨论】:

  • 我将此指令设置为关闭,现在它工作正常!谢谢!
  • 它声称在 PHP 中默认为off/0,但在php.ini 中再次将值设置为0 确实为我解决了这个问题。对我来说,sentry-php 发生了这种情况,并且这个解决的参数/变量没有被发送到 Sentry。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 2015-06-23
  • 2011-05-29
  • 2011-09-10
  • 2017-08-06
  • 2010-09-13
相关资源
最近更新 更多