有效地查找通知/警告/错误的来源

时间:2017-03-04 作者:Jarod Thornton

在调试插件或主题时,我经常会遇到一个通知/警告/错误,它并不能真正提供有用的调试信息。

Notice: get_current_site_name is deprecated since version 3.9.0! Use get_current_site() instead. in /wp-includes/functions.php on line 3835

我知道这里提到了get_current_site_name 有些地方需要改变,但很多时候我都不知道该去哪里找。我对现有主题和插件在后台所做的工作有一定的了解,并且它允许快速查找和修复,我的根目录成功率为75%。然而,另外25%的时间我只能忍受错误,因为我几乎没有时间去挖掘数百个文件。

Is there a way to determine the plugin / theme file where these messages are actually coming from?

3 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

这就是避免膨胀的规则最适用的地方。您应该问问自己,为什么使用的代码会产生这么多错误。理论上,你不应该修复错误,而应该等待作者来修复,就像你自己修复一样,你基本上是在分叉插件/主题。

更具体地说,你的问题的答案是,可能不可能比90%更准确。您可以使用“query monitor“插件以获取堆栈跟踪,但即使是堆栈跟踪,对于非平凡情况也只有有限的值。例如,在访问数组元素时,您可能会遇到“未定义索引”类型的错误,这是值保存时发生的DB访问错误的结果,并且只有在使用该值时才会看到它的症状。

而且,由于发现和修复非琐碎的错误并非小事,而且出错总是可能导致安全漏洞或一般站点故障,因此您不应该使用插件和主题,因为没有及时的更新或良好的有效支持,这些插件和主题会让您独自思考这类问题。

SO网友:majick

您可以通过不同的方式搜索已安装的文件,以查找出现错误/警告的函数名。有三种方法:

通过FTP下载所有已安装的文件。使用具有“在文件中查找”功能的文本编辑器搜索子文件夹(例如TextPad)这是一种缓慢的方式,除非您已经保存了本地副本,在这种情况下,这是一种快速的方式。

通过SSH登录服务器并使用命令行中的搜索命令。

cd /home/USERNAME/web/DOMAIN/ (安装下方的路径)

fgrep -R "FUNCTION_NAME" public_html (其中public\\u html是安装目录)

使用一个插件,可以从您的管理区域搜索所有已安装的插件或主题文件,例如。WP BugBot (完全披露:您的真实写法正是为了这个目的。)我认为通过更改PHP配置或错误设置,也可以让错误消息输出有关错误的更多信息,但这是一个更高级的选项,我将把它留给进一步的研究。

SO网友:Paul \'Sparrow Hawk\' Biron

在这种情况下,我的最后一招是temporarily 添加对PHP的调用debug_print_backtrace() 在警告消息中指示的文件/行#处运行。

通过检查debug_print_backtrace() 您可以看到导致生成警告消息的调用堆栈。有时调用堆栈相当深,仍然需要一段时间才能弄清楚到底发生了什么。

相关推荐

(Xdebug Profiler)为什么一个页面会生成两个cachegrind文件?

当我启用时xdebug profiler, 在admin中打开一个页面,它会生成两个名称几乎相同的cachegrind文件cachegrind.out.1498219635_761795.crown__minilio_wp-admin_edit_php cachegrind.out.1498219639_141988.crown__minilio_wp-admin_edit_php 输出名称定义为xdebug.profiler_output_name = \"cachegrind.out