您如何调试插件?


49

我是插件创作的新手,调试时很费力。

我使用了很多回声,而且草率而丑陋。

我确定有更好的方法可以执行此操作,也许是带有调试器的IDE,我可以在其中运行整个站点(包括插件)吗?


1
我还没有看到可以在IDE内完全运行WordPress的IDE……尽管那太棒了。我通过在本地运行WAMP并在Dreamweaver中进行代码来调试插件。如果您WP_DEBUG按照John的建议将其设置为false,那么您就可以很好地了解脚本中出了什么问题(如果有的话)。然后,您可以在Dreamweaver中进行编辑,按Ctrl + S,然后在浏览器中按F5以立即查看更改。
EAMann

1
@EAMann-确保同时检查PhpEd(对于Windows)和PhpStorm + XDEBUG(对于Mac,Linux和Windows)。
MikeSchinkel 2010年

Answers:



12

如果打印出错误,则x-debug是一个出色的PHP扩展,它为PHP添加了现代回溯。

如果您试图弄清没有错误的情况,我最喜欢的方法是定义一个函数,将其输出记录到文件中。所以我做了plog($ variable),它出现在日志文件中,然后我可以检查它。当您试图弄清楚在header()调用之前发生的情况,或者在其他无法打印到STDOUT的情况下,这特别有用。


10

使用xdebug + NetBeans IDE。完全配置后(这很容易做到),您可以在插件中设置断点,并在断点处观察变量。我认为这是调试插件或任何php应用程序的最佳方法。


6

我调试老式的方法,error_log()ing和var_dumping。我发现这对我来说是最有效的方法,我有几个包装函数来处理不同类型的数据,因为error_log数组和对象的合并可能会很麻烦。另外,print_r()在in中使用in可能很难读取<pre>。我有tj_log()错误日志记录和tj()显示输出(基本上显示了可显示的方式中的任何数据类型:

function tj( $code ) {

    ?>
    <style>
        .tj_debug { word-wrap: break-word; white-space: pre; text-align: left; position: relative; background-color: rgba(0, 0, 0, 0.8); font-size: 11px; color: #a1a1a1; margin: 10px; padding: 10px; margin: 0 auto; width: 80%; overflow: auto; -moz-box-shadow:0 10px 40px rgba(0, 0, 0, 0.75); -webkit-box-shadow:0 10px 40px rgba(0, 0, 0, 0.75); -moz-border-radius: 5px; -webkit-border-radius: 5px; text-shadow: none; }
    </style>
    <br /><pre class="tj_debug">

    <?php
    if ( is_null( $code ) || is_string($code) || is_int( $code ) || is_bool($code) || is_float( $code ) ) :
        var_dump( $code );

    else :
        print_r( $code );

    endif;

    echo '</pre><br />';

}

function tj_log( $code ) {

    if ( is_null( $code ) || is_string($code) || is_int( $code ) || is_bool($code) || is_float( $code ) ) :
        $code = var_export( $code, true );

    else :
        $code = print_r( $code, true );

    endif;

    error_log( $code );

}

所以,我就这样做:tj( $current_user );或其他。


5

修补了许多IDE之后,我使用了超定制的语法突出显示配色方案,安装到了普通的旧Notepad ++中

我有一个宏设置,当我按下Shift-Ctrl-X时,以下代码将在我的光标所在的位置输出:

echo "<pre>";
var_dump($);
echo "</pre>";
exit();

这很简单,但是通过启用此宏和WP_DEBUG,我通常可以追查90%的错误。


2
好身手。编辑器中的键盘热键震撼!
hakre 2010年

1
我更喜欢print_r($var, true)而不是给出的输出var_dump
brasofilo

5

我编写了一个用于制作日志文件的小类,在调试ajax调用时非常有用。

http://github.com/hunk/Magic-Fields/blob/master/tools/debug.php

您只需要执行以下操作:

Debug :: log(“这是一条调试消息”);

当执行该行时,将在日志文件中添加一条消息,然后您可以使用tail命令(如果使用的是unix风格的操作系统)

tail -f mylogfile.log

如果可以传递给此函数,则还可以使用数组或对象。

注意,您需要将第20行更改为要保存日志文件的路径


3

我在Linux上使用Aptane IDE,在Windows上使用UltraEdit,并且这也有一个PHP解析器。此外,我使用WP_DEBUG定义的常量查看xDebug的所有提示wp-config.php

另请参阅我关于该主题的文章,并随时发表评论并提供有关您的开发工具的反馈。




1

我可以推荐两个IDE,并且已经广泛使用了它们:PhpED(仅Windows)和PhpStorm + XDEBUG(Mac,Windows和Linux。)我现在在Mac上,因此只能使用后者。

他们俩都摇滚!好消息是,PhpStorm在2010年9月之前为49美元,在此之后仅为99美元。如果我在Windows上并且不得不再次选择,则不确定我会选择哪个。

坦白说,我不禁感到任何不使用这两种工具之一的插件开发人员都受到严重的限制,尤其是在开发WordPress插件相对较新的情况下。


1

Krumo-样式化的php调试类

另一个非常好的地方是“ krumo” php类。它在½分钟内实现,并提供了一种调试各种变量的简便方法:

  • 对象
  • 数组
  • 字符串/浮点数/整数/等

此外,它还有助于回溯,显示加载的类或包含的文件以及按需显示的所有内容。

另外它是免费的!

下载

克鲁姆@sourceforge


0

我使用一个名为LogPress的$ 13插件,您可以在ThemeForest上购买它,这绝对是天赐良机。您可以调试与其插件和站点有关的所有内容。支持Firebug控制台日志记录以及更多其他功能。我不能没有它,这就是我使用这个插件的次数。

这个插件可能是我花过的最好的钱,并且在我的Wordpress插件开发中节省了无数小时。


哇,我不推荐推荐与我无关的付费插件?那有点笨拙吗?
Dwayne Charrington

我不是被否决的人,但我并不感到惊讶。您使用的语言就像您要出售插件一样。推荐东西还可以,但要像“绝对的上帝送出”一样努力推销。人们讨厌广告。只需调低语言,推荐就可以说明一切。
icc97 '16

0

我正在使用phpED和xdebug,但对我来说(似乎对其他人来说)是不可能调试插件或主题文件的!调试器仅在主或原始“核心”文件中的断点处停止!有人可以帮助我吗?


0

首先,我将define('WP_DEBUG', false);wp-config.php文件(正如大多数人所说的那样)添加到本地安装中,这是相关生产站点(文件和数据)的最新副本。这使得内容快速,安全,独立,但可以很好地反映出插件将实际使用的至少一个位置。

我还添加了Debug Bar插件以及一些Debug Bar插件(例如Transients),以适合您的插件。

我还使用了适用于Firefox的Firebug插件,该插件非常有助于跟踪html,css和JavaScript问题,也非常适合查看布局怪异现象。

我使用UltraEdit进行编码,我已经在工作和家庭中使用了15年以上的时间来进行一堆编码(从PHP到SQL),所以这对我来说效果很好,但可能我没有足够的评价作为IDE很多人。它具有语法高亮显示,自动完成和代码布局功能以及一堆html和css快捷工具,可帮助避免输入错误等。通常,这给我带来了熟悉,这是在急于求新时经常忽略的重要方面。肌肉记忆甚至在编码中也有助于重复性。

当然,通常我会在合适的示例中的另一个选项卡中从抄本中打开一些合适的页面。

所有这些都以不同的方式帮助突出显示编码,解析,功能和布局错误,并且不会对我的编码方式或是否有任何问题产生很大的干扰。如果您正在尝试或解决一些稍后要重新访问的内容,可以忽略或停用大多数功能。

哦,定位良好的echo或print_r检查某个键上的内容没有什么错(只要您在完成操作后将其删除)。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.