Verwendung der Devel-Debugging-Funktionen für große oder komplexe Objekte

7

Ich habe Probleme, die Debugging-Funktionen von Devel kint()sowie dpm()meine Module und Zweigvorlagen wirklich zu nutzen . Sie funktionieren gut für primitive Variablen, flache Arrays und dergleichen, aber wenn ich ein Objekt wie ein untersuchen möchte, EntityRerefenceFieldItemListverursachen sie entweder einen Absturz der Site (weiße Seite) oder generieren so viele Daten, dass die Skripte zum Erweitern der Liste nicht mehr funktionieren .

Wie umgehe ich diese Probleme?

Hendrik
quelle

Antworten:

8

Wenn Sie mit Entitäten und Feldern arbeiten, möchten Sie die Werte und nicht die Objekte sehen.

Verwenden Sie $entity->toArray()für eine Entität für ein Feldobjekt $field->getValue(). Sie können das fast 1: 1 in den Zugriff auf diese Werte für ein Objekt umwandeln, z. B. $ entity-> field_name-> property.

Einige Dinge werden dort nicht angezeigt, z. B. berechnete Eigenschaften wie -> Entität in einem Entitätsreferenzfeld. Eine allgemeine Einführung finden Sie unter https://wizzlern.nl/drupal/drupal-8-entity-cheat-sheet .

Das heißt, ich würde auch dringend empfehlen, einen IDE + xdebug gegenüber allen Debugging-Funktionen zu verwenden. Ich verwende nur diesen und manchmal einen einfachen debug (), der für die von den oben genannten Methoden zurückgegebenen Wertearrays einwandfrei funktioniert.

Berdir
quelle
9

Das erste Problem kann vorübergehend behoben werden, indem die maximalen Array- / Objektebenen geändert werden. Kint wird tief gehen. Derzeit muss dies noch durch Ändern einer Codezeile im Modul erfolgen. Es gibt jedoch bereits ein Problem mit https://www.drupal.org/node/2405179 , um diese Einstellung konfigurierbar zu machen.

Im devel/kint/kint/config.default.phpWechsel 7zu einer beliebigen Nummer, mit der Sie einverstanden sind. Normalerweise setze ich es auf 4.

/** @var int max array/object levels to go deep, if zero no limits are applied */
$_kintSettings['maxLevels'] = 7;

Denken Sie daran, dass diese Nummer zurückgesetzt wird, sobald Sie das Devel-Modul aktualisieren.


Update: Jetzt habe ich festgestellt, dass dieses schöne Snippet einfach in Ihren Einstellungen (.local) .php platziert werden kann. Keine Hacking oder Patches erforderlich.

// Change kint maxLevels setting:
include_once(DRUPAL_ROOT . '/modules/contrib/devel/kint/kint/Kint.class.php');
if (class_exists('Kint')) {
  // Set the maxlevels to prevent out-of-memory.
  Kint::$maxLevels = 4;
}
Leymannx
quelle
4

Das Entwicklungsmodul ist ein großartiges Werkzeug, funktioniert jedoch nicht in jeder Situation. Es gibt tatsächlich ein Modul zum Debuggen von Twig, bekannt als Twig XDebug (das ich noch nicht implementiert habe).

Oder

Lassen Sie xdebuger manuell mit Ihrer IDE installieren.

Frei verfügbare IDEs:

  • Netbeans

  • Finsternis

  • Aptana Studio (Eclipse-Derivat)

Bezahlte IDEs:

  • phpDesigner

  • Jetbrains PHPStorm

  • Komodo IDE (bietet einige kostenlose / flexible Preisszenarien).

Nächste Schritte, die nach Auswahl einer IDE ausgeführt werden müssen.

  1. Installieren Sie Xdebug

  2. Ändern Sie Ihre php.ini-Konfiguration, um xdebug zu aktivieren

  3. Installieren Sie Ihre IDE, konfigurieren Sie die Verwendung von xdebug und eines Browsers.

  4. Möglicherweise ein Browser-Plugin für xdebug. Ex- Xdebug-Helfer für Chrome

Ashish Deynap
quelle
Zum ersten Teil: Derzeit bietet devel auch die XDebug-Integration für Twig-Vorlagen mit Funktion {{ devel_breakpoint() }}. siehe hier
marco
4

Seien Sie vorsichtig mit Mausklicks, klicken Sie nicht auf das +Symbol! Dies erweitert alle Ebenen, was lange dauern kann. Wenn Sie auf die Titelleiste klicken, erweitern Sie nur die oberste Ebene.

Drupal 8 Debugging: Kareful Klicking in Kint

4k4
quelle
Ich denke, es geht nicht darum, auf das Pluszeichen in der linken Ecke von Kint zu klicken, aber es ist tatsächlich der Fall, wenn die Größe des Objekts so groß ist, dass die Seite zwischen dem Rendern unterbrochen wird und eine leere weiße Seite angezeigt wird.
Ashish Deynap
Hier geht es um den letzten Teil der Frage: "... oder so viele Daten generieren, dass die Skripte zum Erweitern der Liste nicht mehr funktionieren." - Der Rest wird durch die anderen Antworten perfekt abgedeckt.
4k4