得到一个堆栈跟踪
编辑该页面得到一个堆栈跟踪
当报告一个错误异常或错误的行为的代码,它是至关重要的,你提供一个或多个堆栈跟踪。要理解为什么,首先必须了解什么是堆栈跟踪,以及它如何对你是有用的作为一名开发人员,以及图书馆的维护者。
解剖一个堆栈跟踪
调用堆栈跟踪方法,因为它允许一个人看到一串函数调用代码中导致点以来的计划。这一点不一定是一个例外。例如,您可以使用本机PHP函数debug_print_backtrace ()
能得到这样一个痕迹。每一行的跟踪,得到一个文件和一个函数或方法调用,和行号。这通常是很大的帮助对于理解程序的流程以及如何在最意想不到的地方,比如行代码异常被抛出。
堆栈跟踪和异常
在PHP中,所有异常都有自己的堆栈跟踪,这是默认情况下如果异常没有被显示。当使用Symfony,ob娱乐下载这种例外通过一个自定义异常处理程序,这增强了它们以不同的方式显示它们根据当前服务器之前API (CLI)。这意味着一个更好的方法来获得一个堆栈跟踪,当你不需要这个项目继续抛出一个异常,如下:抛出新\异常();
嵌套的异常
当应用程序变得更大,复杂性通常与层的体系结构,解决需要分开。例如,如果你有一个web应用程序,它调用一个远程API,它可能是好的包装时引发的异常与异常的电话在你的领域有特殊的意义,并建立适当的HTTP的异常。可以通过使用嵌套的异常之前的美元
参数出现在的签名异常
类:公共__construct ([string美元消息= " [int $代码= 0 [Throwable以前美元= NULL]]])
这意味着,有时,当你从一个应用程序获得一个例外,你可能会得到其中几个。
在堆栈跟踪寻找什么
当使用一个图书馆,你会叫你不写的代码。当使用一个框架,它是相反的:因为你遵守约定的框架,框架代码发现并调用它,事先为你做事,像路由或访问控制。ob娱乐下载Symfony框架和库的组件,它调用您的代码,然后你的代码会调用它。这意味着你总是至少有2部分,通常3在堆栈跟踪,当使用Symfony:开始的一部分的一个入口点的框架(ob娱乐下载bin /控制台
或公共/ index . php
在大多数情况下),达到你的代码时,大多数时候在控制器中的一个命令或发现src
。然后,代码中的异常或在图书馆你的呼唤。如果是后者,应该有一个第三部分与调用堆栈跟踪文件下供应商
。在该目录着陆之前,代码经过大量的审查过程和CI管道,这意味着它应该是不太可能的来源问题比从您的应用程序代码,所以很重要的是,你首先关注行开始src
,寻找任何可疑的或意想不到的,比如方法调用,不应该发生。
接下来,你可以看一看包。下的文件供应商
是由作曲家以下列方式:供应商/ acme /路由器
在哪里acme
是供应商,路由器
图书馆,acme /路由器
作曲家包。如果你计划在bug报告,确保图书馆抛出的异常报告。作曲家acme /路由器
应该让你正确的位置。因为Sob娱乐下载ymfony是mono-repository,使用作曲家家里symfony /ob娱乐下载 symfony
当报告任何组件的缺陷。
被Symfony堆栈跟踪ob娱乐下载
现在我们都记住这一点,让我们看看如何让Symfony的堆栈跟踪。ob娱乐下载
在您的Web浏览器中堆栈跟踪
几件事情需要注意当选择一个堆栈跟踪通过web浏览器从您的开发环境:
- 有几个例外吗?如果是,最有趣的一个通常的例外1 / n,去年在下面的例子中(这是一个标记为异常(1/2))。
- 在“堆栈跟踪”选项卡上,你会发现异常在纯文本,这样你可以很容易地共享他们如bug报告。一定要删除任何敏感信息在这样做之前。
- 你可能会注意到有一个日志选项卡;这个标签没有堆栈跟踪,它只包含记录在任意地方在您的应用程序。他们可能会或可能不会与例外你得到,但不“堆栈跟踪”一词指的是什么。
从堆栈跟踪可能包含敏感数据,他们不应该暴露于生产。得到一个堆栈跟踪从生产环境中,虽然更多的涉及,仍然是有可能的解决方案,包括但不限于发送与独白一个电子邮件地址。
在CLI堆栈跟踪
Symfony命令运行时可能发生异常。ob娱乐下载默认情况下,只显示消息,因为它是经常了解是怎么回事:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
美元php bin /控制台调试:异常命令“调试:异常”没有定义。你的意思是其中一个吗?调试:自动装配调试:配置调试:容器调试:事件分配器调试:调试:路由器调试:调试翻译:树枝
如果情况并非如此,你可以通过增加获得一个堆栈跟踪冗长的水平与——详细
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24日25
美元php bin /控制台——详细调试:异常中的应用。php第644行:\控制台\例ob娱乐下载外\ [Symfony \组件CommandNotFoundException]命令“调试:异常”没有定义。你的意思是其中一个吗?调试:自动装配调试:配置调试:容器调试:事件分配器调试:调试:路由器调试:调试翻译:树枝异常跟踪:在/ app /供应商/ symfony /控制台应用程序。ob娱乐下载php: 644ob娱乐下载 Symfony \组件\ \控制台应用程序- >找到()/ app /供应商/ Symfony / framework-bundle /控制台应用程序。php: 116ob娱乐下载 Symfony \ \包\ FrameworkBundle \控制台应用程序- >找到()/ app /供应商/ Symfony /控制台应用程序。php: 228ob娱乐下载 Symfony \组件\ \控制台应用程序- > doRun()在/ app /供应商/ Symfony / framework-bundle /控制台应用程序。php: 82ob娱乐下载 Symfony \ \包\ FrameworkBundle \控制台应用程序- > doRun()在/ app /供应商/ Symfony /控制台应用程序。php: 140ob娱乐下载 Symfony \ \组件\控制台应用程序- >运行在/ app / bin /控制台():42
堆栈跟踪和API调用
当从一个API获得一个异常时,你可能不会得到一个堆栈跟踪,也可能是显示的方式不适合共享。幸运的是,当在开发环境中,您可以获得一个纯文本分析器使用堆栈跟踪。找到这个概要文件,您可以看一看X-Debug-Token-Link
响应标头:
1 2 3 4 5 6
美元curl——http://localhost: 8000 / api /文章/ 1…更头X-Debug-Token: 110 e1e X-Debug-Token-Link: http://localhost: 8000 / _profiler / 110 e1e X-Robots-Tag: noindex X-Previous-Debug-Token: 209101
后,将引导您进入一个页面的链接非常类似于上面所描述的在您的Web浏览器中堆栈跟踪。