dpm () ไม่แสดงผลลัพธ์ใด ๆ บนหน้าจอ


23

ฉันมีปัญหาเช่นเดียวกับfile_scan_directory () ใช้เวลาประมาณ 10 วินาทีในการดำเนินการ ฉันลองทำตามdpm(func_get_args())คำแนะนำ แต่น่าเสียดายที่มันไม่ได้แสดงอะไรให้ฉันเลย

ฉันล้างแคชทั้งหมดแล้วและทำงาน cron ฉันพลาดอะไรไป


2
ตรวจสอบให้แน่ใจว่าคุณมีสิทธิ์ในการเข้าถึงข้อมูลนักพัฒนาซอฟต์แวร์ภายใต้ devel ในบุคคล / การอนุญาต
karthik

คำตอบ:


28

ตรวจสอบให้แน่ใจว่าคุณมีprint $messages;ของคุณในpage.tpl.phpแฟ้มแม่แบบ ตามค่าเริ่มต้น devel (dpm) ได้รับการกำหนดค่าให้พิมพ์เนื้อหาในพื้นที่ข้อความของไซต์ ดังนั้นหากเทมเพลตของคุณด้วยเหตุผลบางอย่างไม่สามารถแสดงเนื้อหาของ$messagesคุณจะไม่เห็นอะไรเลย


13
  1. บางครั้งkrumo($variable)อาจทำงานเมื่อdpm($variable)ไม่ได้

  2. บางครั้งprint dpm($variable)อาจทำงานเมื่อdpm($variable)ไม่ได้

    1. อาจเป็นวิธีแก้ปัญหาเมื่อไม่มีprint $messagesในตัวคุณpage.tpl.phpอีกต่อไป บางทีคุณสามารถเพิ่มกลับได้

9

คุณต้องลงชื่อเข้าใช้เว็บไซต์ Drupal ด้วยสิทธิ์ที่ถูกต้องในการเข้าถึง Devel เข้าสู่ระบบในฐานะผู้ดูแลระบบควรทำ


7
ไม่จำเป็นต้องเข้าสู่ระบบหากผู้ใช้ที่ไม่ระบุชื่อมีสิทธิ์ที่ถูกต้อง
kiamlaluno

3
การอนุญาตนี้สามารถดูได้ที่ 'ผู้ดูแลระบบ / คน / สิทธิ์' ภายใต้ 'การเข้าถึงข้อมูลนักพัฒนา'
Citricguy

9

ฉันขอแนะนำให้devel_debug_log ต้องใช้โมดูล devel และให้ฟังก์ชัน ddl () ddl เพิ่มหน้าลงในรายงานของคุณในการกำหนดค่าดังนั้นจึงคล้ายกับการพิมพ์ไปยังสุนัขเฝ้าบ้าน แต่คุณมีหน้าสะอาดดีที่คุณสามารถส่งข้อความดีบั๊กของคุณและไม่ต้องกังวลเกี่ยวกับเงื่อนไขประเภทการแข่งขันที่ข้อความของคุณ โอกาสที่จะเห็นพวกเขา - หรือในกรณีของคุณประเด็นเรื่อง

(นี่เป็นเครื่องมือที่มีประโยชน์อย่างมากหากคุณพยายามสร้าง API ประเภทใด ๆ เนื่องจากคำขอเหล่านั้นจะไม่แสดงข้อความ dpm () ใด ๆ เลย)


1
นี่เป็นทางออกโดยรวมที่ดีที่สุดสำหรับฉัน
rrirower

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 ()) ไม่แสดงอะไรเลย
Jimmy

ที่คุณจะใส่dpm(func_get_args());?
Chapabu

ในไฟล์ bootstrap.inc: dpm (func_get_args ()); $ match = drupal_system_listing ("/ ^". DRUPAL_PHP_FUNCTION_PATTERN. "\. $ extension $ /", $ dir, 'name', 0); ...
Jimmy

ลองเปลี่ยนdpm(func_get_args());เป็นdie(print_r(func_get_args());- บายพาส Devel สักครู่
Chapabu

3
หากคำสั่งที่สองที่ Chapabu แนะนำไม่เปลี่ยนแปลงอะไรเลยหมายความว่ารหัสนั้นไม่ถูกเรียกใช้และคุณจะไม่ได้รับผลกระทบจากปัญหาเดียวกัน
Berdir

5

หากคุณต้องการพิมพ์จากด้านในฟังก์ชั่นโดยไม่ต้องแตะ (หรือมี) ไฟล์เทมเพลตลองสิ่งนี้:

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

3

บางครั้งนี่เป็นผลลัพธ์ของทรัพยากรบนหน้าเว็บที่ส่งคืน 404

Drupal วาทกรรม 404 หน้าและในการทำเช่นนั้นดึง (และล้าง) ข้อความจากเซสชั่นและวางไว้ในหน้า 404 ที่คุณไม่เห็น จากนั้นเมื่อหน้าหลักเรียกข้อความที่ไม่มีเหลือ

คุณสามารถเปิดแท็บเครือข่ายและตรวจสอบเพื่อดูว่าทรัพยากรใด ๆ ที่มีสถานะ 404

วิธีแก้ปัญหาอย่างง่ายที่นี่คือการเปิดใช้งาน 404 ที่รวดเร็วโดยการยกเลิกหมายเหตุบรรทัดนี้ใน settings.php

# drupal_fast_404();

อีกวิธีที่ดีที่นี่คือใช้devel_debug_logตามที่SlakeFistcrunchแนะนำ


2

บางครั้งข้อความอาจถูกตัดหรือไม่สามารถใช้งานได้ในกรณีของ AJAX

วิธีการที่เชื่อถือได้มากขึ้นคือการทำเพียง (จากนั้นลบหลังจากเสร็จสิ้น):

var_dump($data); die();

หรือคุณสามารถใช้dd()(ส่วนหนึ่งของ Devel เช่นกัน) เช่น

dd(func_get_args());

จากนั้นตรวจสอบไฟล์บันทึกของคุณ (ในโฟลเดอร์ temp) เช่น

$ tail -f /tmp/drupal_debug.txt

การใช้วิธีการด้านบนนั้นสะดวกกว่าเร็วกว่าและอาจรองรับ AJAX หรือคำขออื่น ๆ โดยไม่ทำให้การแสดงผลของไซต์ปัจจุบันเสียหาย


หากคุณยังต้องการdpm()ลองใช้kint()(เปิดใช้งาน submodule 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))

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.