调试Drupal
本页简要概述了一些可用于使Drupal开发和调试更容易的工具。
它涵盖Devel contrib模块,Drupal for Firebug contrib模块和Firefox扩展,FirePHP库以及NetBeans和Xdebug的组合。
本指南在Drupal.org上提供了一个配套模块。在问题队列中发布更正或添加。
Devel模块
除了核心模块,Devel包还包含一些其他有用的模块:
- Devel generate:生成伪用户,节点和分类术语。
- 主题开发人员:为主题开发人员显示主题API信息。(注意,如果启用了Drupal for Firebug,此模块不工作。)
这些模块不包括在本指南中。有关详细信息,请参阅Drupal手册。安装
- 从Drupal.org下载并安装最新版本的Devel模块。
- 转到管理→构建→模块并启用Devel模块。
dpm()
使用drupal_set_message()将变量打印到页面的“消息”区域。当您在运行网站的代码时,您可以使用此函数来跟踪一个或多个变量。因为Devel模块现在带有Krumo,输出是紧凑和不引人注目的。
dpm($input, $name = NULL)
如果由于某些原因,您没有使用Krumo,您可以使用$ name参数来区分对dpm()的不同调用。
dvm()
使用var_dump()使用drupal_set_message()将变量打印到页面的“消息”区域。该函数的输出比基于Krumo的dpmt()的输出更难读取,但如果需要将其复制并粘贴到另一个应用程序,它会很有用。
dvm($input, $name = NULL)
如果由于某些原因,您没有使用Krumo,您可以使用$ name参数来区分对dvm()的不同调用。
dpr()
漂亮地打印一个变量到浏览器(不使用krumo)。输出显示在页面标题中,如果您的主题不打印$ messages变量,这是一个不错的选择。
dpr($input, $return = FALSE, $name = NULL)
如果要返回字符串而不是打印字符串,请将第二个参数设置为TRUE。
您可以使用$ name参数来区分对dpr()的不同调用。
dvr()
使用var_dump()将变量漂亮打印到浏览器(不使用krumo)。输出显示在页面标题中,如果您的主题不打印$ messages变量,这是一个不错的选择。
dvr($input, $return = FALSE, $name = NULL)
如果要返回字符串而不是打印字符串,请将第二个参数设置为TRUE。
您可以使用$ name参数来区分对dvr()的不同调用。
kpr()
使用krumo在浏览器中漂亮打印一个变量。输出显示在页面标题中,如果您的主题不打印$ messages变量,这是一个不错的选择。由于它使用Krumo,它有额外的优势,输出是非常紧凑和不引人注目。
kpr($input, $return = FALSE, $name = NULL)
如果要返回字符串而不是打印字符串,请将第二个参数设置为TRUE。
dargs()
打印传递到当前函数的参数。在这种情况下,参数是'foo'和'42'。你可以使用这个函数,如果你不完全确定一个特定的Drupal钩或函数接收的参数在你正在处理的代码。
dargs()
dd()
将任何变量记录到站点的临时目录中名为“drupal_debug.txt”的文件。此函数的所有输出都附加到日志文件中,从而可以轻松了解变量内容在修改代码时如何变化。
如果您使用Mac OS X,则可以使用日志记录控制台来监视日志文件的内容。
如果你使用Linux的风格,你可以使用命令“tail -f drupal_debug.txt”来观察正在记录到文件的数据。
dd($data, $label = NULL)
ddebug_backtrace()
打印函数调用堆栈。
ddebug_backtrace()
db_queryd()
此函数是db_query()的调试版本,它将查询和任何错误消息打印到浏览器。如果要监视一些数据库查询,但不需要用于构建当前页面的所有数据库查询的Devel模块列表,此函数非常有用。
db_queryd($query, $args = array())
Firebug的Drupal
在本节的所有示例假设您正在运行的最新版本的Firefox与Firebug插件。
请注意,Drupal for Firebug似乎不适用于Devel包中的Theme开发器模块。
安装
- 安装Drupal for Firebug模块
- 安装DrupalForFirebug Firefox加载项。您可以在Drupal for Firebug 项目页面上找到指向当前版本的链接。
安装Firefox附加组件后,转至管理→构建→模块,然后启用两个Drupal for Firebug模块。
正在使用
一旦你已经安装了加载项并启用了模块,一个新的Drupal选项卡在Firebug中可用。以下部分描述每个子标签。
一般
通用选项卡用作Drupal for Firebug的一般日志区域。它告诉你,你正在看的网站是运行Drupal,并已安装和启用Drupal for Firebug。
如果要将Drupal相关的日志消息保留在正常的Firebug控制台之外,可以使用firep()函数向Drupal for Firebug日志写入消息:
firep($item, $optional_title)
您可以在下面的屏幕截图“常规:关闭”和“常规:打开”中查看示例输出。
SQL
要使用SQL选项卡,您必须首先启用查询信息收集。转到管理→站点配置→设置并标记“收集查询信息”复选框。
SQL选项卡现在显示已构建当前页的所有数据库查询的列表。这在启用“显示查询日志”时由Devel模块显示的本质上是相同的输出,但如果不希望数据库查询列表在页面显示上混乱,则可以使用SQL选项卡。
形式
窗体选项卡显示用于在当前页面上构建窗体的窗体数组。这在尝试标识在修改或删除表单元素时使用的正确数组键非常有用。
用户
“用户”选项卡显示与当前登录的用户关联的$ user对象,如果当前会话未登录,则显示与匿名用户关联的$ user对象。
为了查看root用户以外的用户(UID = 1)的输出,您必须授予用户“Access Firebug Debug”权限。
节点
“节点”选项卡显示有关当前页面上加载的每个节点的信息。
输出显示节点对象在加载之后,视图阶段之后和alter阶段之后的内容。这对于确定节点的内容正在被修改的点是有用的。此外,这是一种获得开发自定义节点模板时可用节点字段概述的方便方法。
视图
“视图”选项卡显示有关当前页面上的视图的信息。
您可以使用此选项卡获得所使用的显示器类型,基本表和不同视图的寻呼机设置的概述。
执行PHP
执行PHP选项卡允许您在完全引导的Drupal实例的上下文中执行PHP代码。当您想要检查在前端中不显示任何数据的函数的输出时,这可能很有用。此外,您可以使用它来快速检查Drupal变量或全局变量的值。
所有你执行的代码的行为就好像它被实现为路径“admin / firebug / exec”的页面回调。
只有具有“执行Firebug PHP”权限的用户才能使用此选项卡。
FirePHP
本节中的所有示例假设您运行的是带有Firebug加载项的最新版本的Firefox,并且启用了Devel模块。
安装
- 安装FirePHP Firefox插件。
- 按照Devel模块的README文件中的说明下载并安装FirePHP库。
正在使用
dfb()
您可以使用dfb()函数将日志消息直接写入一般的Firebug控制台。
dfb($input, $label = NULL)
设置$ label参数以区分日志消息与代码的不同部分(即函数名称,模块名称或另一个标识符)。
dfb()与严重性级别
可以通过向函数调用添加一个额外的参数来写入具有不同严重性级别的日志消息:
dfb($input, $label = NULL, $severity = FirePHP::LOG)
您可以选择以下严重性级别:
- FirePHP :: LOG正常的日志消息
- FirePHP :: INFO向日志消息中添加蓝色信息图标
- FirePHP :: WARN在日志消息中添加蓝色信息图标和青色背景颜色
- FirePHP :: ERROR向日志消息中添加红色错误图标,并在状态栏中显示Firebug错误
XDebug和NetBeans
目前本指南仅适用于Ubuntu。本指南的这一部分假设您有一个运行的Ubuntu系统,安装了Apache,MySQL和PHP,并且它们配置为在本地运行Drupal。安装
正在使用
在NetBeans中创建项目
- 选择文件→新建项目...
- 从现有源中选择PHP应用程序
- 选择您的Drupal项目的根文件夹,并为您的项目选择一个名称。在大多数情况下,最容易让NetBeans将元数据存储在Drupal根目录中,因为您可以告诉VCS忽略此文件夹
- 选择“运行为本地网站”,并输入用于访问站点的本地URL
- 转到工具→选项
- 在PHP选项卡上取消选中“停止在第一行”框,以确保调试器只停止,如果您设置了一个或多个断点
开始调试
- 打开您要调试的文件
- 通过单击边距中的行号或按CTRL + F8添加一个或多个断点
- 选择调试→调试项目或按CTRL + F5
- 选择服务器端PHP,然后单击调试。如果您不想在每次启动调试器时都显示此对话框,请选中“不再显示”框
当调试器正在运行时,可以使用“局部变量”选项卡显示当前所有变量以及所有超级元素的内容。
“调用堆栈”选项卡显示调用堆栈中的当前位置。
您可以通过转到NetBeans 中的窗口→调试菜单来添加更多选项卡。
键盘快捷键
在调试器下运行时,使用以下快捷键遍历代码:
键 | 行动 |
---|---|
F5 | 继续 |
F8 | 跳过 |
F7 | 步入 |
CTRL + F7 | 走出去 |
F4 | 运行到光标 |
使用Xdebug分析
除了它的基本用途作为一个调试工具,您还可以使用它来配置您的代码。这是一个两步过程:首先使用Xdebug生成缓存grind输出文件。然后,使用Webgrind等工具分析输出文件。
如果您已安装并配置Xdebug,则可以通过将此行添加到xdebug.ini文件来启用分析:
xdebug.profiler_enable_trigger=1
通常可以在中找到xdebug.ini文件/etc/php5/conf.d/
。
要创建cachegrind文件,请?XDEBUG_PROFILE
在您的网站上加载网页时添加查询参数:
drupal.local/?XDEBUG_PROFILE
这将在您的目录中生成一个cachegrind.out。<pid>文件/tmp
。
要分析输出文件,您可以在本地Web服务器上安装类似Webgrind的工具:
- 获取Webgrind的最新副本。
- 将其安装在本地目录中并为其创建虚拟主机,以便您可以访问http:// webgrind /。
当您访问Webgrind首页时,可以使用屏幕顶部的下拉框选择要分析的缓存grgr文件。
处理完文件后,webgrind显示所有函数的列表,这些函数被调用来构建当前页面。有关示例输出,请参见下面的屏幕截图。