dpm()在屏幕上不显示任何结果


Answers:


28

确保你有print $messages;你的page.tpl.php模板文件。默认情况下,将devel(dpm)配置为在站点的消息区域中打印其内容。因此,如果您的模板由于某种原因未呈现的内容$messages,您将看不到任何内容。


13
  1. 有时krumo($variable)可能dpm($variable)无法正常工作。

  2. 有时print dpm($variable)可能dpm($variable)无法正常工作。

    1. 如果print $messagespage.tpl.php再也没有了,那也可能是解决方案。也许您可以将其添加回去。

9

您必须具有访问Devel的正确权限登录到Drupal站点。以管理员身份登录应执行此操作。


7
如果匿名用户具有正确的权限,则无需登录。
kiamlaluno

3
可以在“访问开发者信息”下的“管理员/人员/权限”中找到此权限。
Citricguy 2012年

9

我强烈建议devel_debug_log。它需要devel模块,并且为您提供ddl()函数。ddl在配置中将页面添加到报表中,因此类似于打印到看门狗,但是您有一个干净的页面,可以在其中发送调试消息,而不必担心种族类型的情况,在此之前您可能会清除消息有机会看到它们-或就您而言,就是主题问题。

(如果您尝试构建任何类型的API,这也是一个非常有用的工具,因为所有这些请求都不会向您显示任何类型的dpm()消息。)


1
这对我来说是最好的整体解决方案。
rrirower '16

1
在调试ajax请求时也非常有用。
菲利克斯·夏娃

8

确保已启用并安装Devel模块,这dpm()是该模块中声明的功能。

dpm()描述从这里得到

使用drupal_set_message()将变量输出到页面的“消息”区域。在处理运行站点的代码时,可以使用此功能来跟踪一个或多个变量。因为Devel模块现在随Krumo一起提供,所以输出紧凑且不引人注目。

dpm($input, $name = NULL)

如果由于某种原因未使用Krumo,则可以使用$ name参数来区分对dpm()的不同调用。

下载并启用Devel后,尝试执行file_scan_directory()中的答案大约需要10秒钟才能再次执行,它应该可以工作。


它保持不变。我安装并启用了devel模块,清除了所有缓存,运行cron,但dpm(func_get_args())仍然不显示任何内容。
吉米

你放在哪里dpm(func_get_args());
Chapabu 2012年

在bootstrap.inc文件中:dpm(func_get_args()); $ matches = drupal_system_listing(“ / ^”。DRUPAL_PHP_FUNCTION_PATTERN。“ \。$ extension $ /”,$ dir,'name',0); ...
吉米

尝试更改dpm(func_get_args());die(print_r(func_get_args());-暂时绕过Devel。
Chapabu 2012年

3
如果Chapabu推荐的第二条命令未做任何更改,则仅表示未调用该代码,因此您不会受到同一问题的影响。
Berdir'3

5

如果要在不触摸(或没有)模板文件的情况下从函数内部进行打印,请尝试以下操作:

$nid = 3;
$node = node_load($nid);
dpm($node);
print theme('status_messages'); 

3

有时这是页面上的资源返回404的结果。

Drupal呈现404页面,并从会话中获取(并清除)会话中的消息,并将其放置在您看不到的404页面上。然后,当主页获取消息时,就什么也没有了。

您可以打开“网络”标签,然后检查是否有任何资源处于404状态。

一个简单的解决方案是通过在settings.php中取消注释此行来启用快速404:

# drupal_fast_404();

另一个好的解决方案是使用SlakeFistcrunch建议的devel_debug_log。


2

有时,如果使用AJAX,则消息可能会被剪切或无法使用。

更可靠的方法是执行以下操作(然后在完成后删除):

var_dump($data); die();

或者您可以使用dd()(也是Devel的一部分),例如

dd(func_get_args());

然后检查您的日志文件(在临时文件夹中),例如

$ tail -f /tmp/drupal_debug.txt

使用上述方法更加方便,快捷,并且可以在不中断当前站点渲染的情况下支持AJAX或其他请求。


如果您仍然喜欢dpm(),请尝试使用kint()(启用包含的Kint子模块以显示这些漂亮的变量)。


1

如果仅某些dpm()呼叫不起作用,则可能是由于dpm()崩溃。我在以下情况下在自定义表单提交处理程序中看到了这种情况:

function mymodule_formid_submit($form, &$form_state) {
  dpm($form_state);
}

我相信错误条件是由中的异常处理程序捕获的dpm(),因为页面显示的很好,没有WSOD或类似的东西,也没有任何dpm()消息。该错误可能是未检测到的递归,因为使用ddl($form_state)替代方法会导致浏览器在查看由“ Devel调试日志”模块生成的报告中的相应对象时浏览器在内存上的占用最大。

解决方法是,尝试仅打印对象的(相关)部分,例如dpm($form_state['values'])dpm(array_keys($form_state))

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.