以下是来自PHP 7运行时的错误消息示例:
PHP致命错误:未捕获错误:类 在predis.php中找不到'Predis \ Connection \ ConnectionException':4168
堆栈追踪:
#0 /var/www/api/libraries/predis/predis.php(4455): Predis \ Connection \ AbstractConnection-> onConnectionError('错误时 rea ...')
注意标记为#0的第一个堆栈跟踪线的省略号:
('错误,而rea ......')
如果没有被切断,这就是最重要的信息。其他错误消息具有相同的问题,通常会切断消息中非常有价值的部分。
是否有可用于在堆栈跟踪中打印更多信息的设置?我们使用的PHP的确切版本是7.1.1。
更新 How to disable PHP cutting off parts of long arguments in exception stack trace?中描述了我们遇到的确切问题。这个问题可以是一个骗局。想法是捕获异常,调用Exception :: getTrace()并手动构造错误消息。可以在全局处理程序或每个try / catch块中捕获异常。 Exception :: getTraceAsString的默认实现会截断长函数参数。
答案 0 :(得分:1)
如果您在try { ... } catch (Exception $e) { ... }
块中包装可能失败的调用,则可以根据需要显示尽可能多的异常错误消息。
您还可以控制代码对错误所做的操作,或者有助于在将来更好地避免此问题。
答案 1 :(得分:0)
为异常消息生成的错误输出由安装的调试器处理。 PHP附带的默认设置并不具备信息,您无法自定义该输出。
您可以附加自己的错误处理程序并打印自己的堆栈跟踪,也可以更改PHP中安装的调试程序。
如果安装xDebug或Zend调试器,则会在堆栈跟踪中获得更多信息。
答案 2 :(得分:0)
您可以使用getTraceAsString();
<?php
function test() {
throw new Exception;
}
try {
test();
} catch(Exception $e) {
echo $e->getTraceAsString();
}
?>
答案 3 :(得分:-1)
我认为你需要意识到你在这里有多层。这是实际错误
PHP致命错误:未捕获错误:在predis.php中找不到类'Predis \ Connection \ ConnectionException':4168
请注意,它未被捕获Error
。您的代码可能不支持PHP 7.0+捕获错误的方法。因此,PHP出错了。至于你为什么要截断
#0 /var/www/api/libraries/predis/predis.php(4455):Predis \ Connection \ AbstractConnection-&gt; onConnectionError('rea while rea ...')
这里有两个问题
Error while rea...
是截断的参数 Predis\Connection\AbstractConnection->onConnectionError
这看起来像一个错误捕获机制。我怀疑这不是你的根本问题,只是症状那么,我们可以解决这个问题吗?是的!
无论你做什么都需要包裹在Throwable
block中。 Throwable
会捕获任何可以引发的内容,包括您的Error
try {
\Your\Code\Here('Hi mom!');
} catch(\Throwable $err) {
echo $err->getMessage();
}