Seite 1 von 1

Besserer Debug-Modus (Frontend-Debugging) inkl. Vorschlag

Verfasst: Di 22. Mai 2007, 13:05
von rethus
Hallo Leute,

ich schlage mich ab und an mit diesen eval() Fehlern rum, und bin absolut unglücklich darüber, das man beim Debuggen (selbst mit frontend-ausgabe) immer einen unnötigen Schritt (kopieren des Quelltextes aus dieser mini-Textarea in einen externen Editor) machen muss, da man doch meist lediglich den Code sichten muss um den Fehler zu finden!

Nun habe ich ein schönes Script gefunden (http://www.yubb.de/artikel520.html?PHPS ... e0fcc9cf55), das den Quelltext mit Zeilennummern und farblichem Highligting versieht.

Anbei mal ein kleiner Screenshot:
Bild Bild

Was haltet Ihr davon, das in Contenido mit aufzunehmen.. ggf. kann man ja in der config.misc.php optional wählen, ob man die textbox oder das highlighting haben möchte.

Hab auch schon gesehen, das der Debugmodus an dieser Stelle etwas unvorteilhaft programmiert ist, da in nahezu jede Datei folgendes enthalten ist um die Textbox zu erzeugen:

Code: Alles auswählen

		if ($cfg["debug"]["codeoutput"])
      	{
			echo "<textarea>".htmlspecialchars($code)."</textarea>";
      	}
 
Besser wäre es, wenn zukünftig der Debug-Teil in einer extra Funktion ausgelagert werden würde, so muss man nicht jede Datei ändern, wenn man den Debugmodus optimieren möchte.
Könnte an der oben dargestellten Codestelle etwa so aussehen:

Code: Alles auswählen

		if ($cfg["debug"]["codeoutput"])
      	{
			echo debug_output($code);
      	}
 
Zwecks Highlighting könnte man dann direkt folgende Funktion nutzen:

Code: Alles auswählen

function debug_output($string)
{
/* Variable $cfg["debug"]["codeoutput_type"] aus "config.misc.php"
    codeoutput_type 1 = highlight
    codeoutput_type 2 = textbox*/

if($GLOBALS["cfg"]["debug"]["codeoutput_type"]=="1")
{  
$Line = explode("\n",$string);  //Zeilen einzeln in ein Array Laden

  for($i=1;$i<=count($Line);$i++)  //Zeilennummern in einer Variablen Speichern
  {
    $line .= "&nbsp;".$i."&nbsp;<br>";
  }
    
  ob_start();  /* Über einen Ausgabepuffer die Ausgabe von highlight_string abfangen und einer Variablen zuweisen */
  highlight_string($string);
  $Code=ob_get_contents();
  ob_end_clean();
  
// Hier wird die Ausgabe in einer header Variable gespeichert
  $header='<table border="0" cellpadding="0" cellspacing="0" width="95%" style="border-style: solid; border-width:1px; border-color: white black black white">
    <tr>
      <td width="100%" colspan="2"  style="border-style: solid; border-width:1px; border-color: white; background-color: #99ccff; font-family:Arial; color:white; font-weight:bold;">Php-Code:</td>
    </tr>
    <tr>
      <td width="3%" valign="top" style="background-color: #99ccff; border-style: solid; border-width:1px; border-color: white;"><code>'.$line.'</code></td>
      <td width="97%" valign="top" style="background-color: white;"><div style="white-space: nowrap; overflow: auto;"><code>';

// Hier wird der gehighlightete Code und die schließenden Html Tags einer Variablen zugewiesen.
  $footer=$Code.'</div></code></td>
    </tr>
  </table>';

// Hier werden beide Variablen zurückgegeben.
  return $header.$footer; 
}
elseif($GLOBALS["cfg"]["debug"]["codeoutput_type"]=="2")
{
// Alte Textbox fürs debugging... jedoch etwas größer, damit man was sehen kann...
$textbox = "<textarea rows=\"50\" cols=\"50\">".htmlspecialchars($code)."</textarea>";
return $textbox;
}
}
PS: Übrigens wäre es auch toll, wenn man den Debugmodus direkt im Adminbereich (ggf. über eine Systemvariable (Administration >> System >> Systemeinstellungen) an und ausschalten könnte.

Für das ändern der Zeile

Code: Alles auswählen

echo "<textarea>".htmlspecialchars($code)."</textarea>";
in

Code: Alles auswählen

echo debug_output($code);
könnte man ja - zumindest unter Linux ein kleines Script schreiben. Anregungen sind hier gerne gesehen.

Zudem bin ich mir noch nicht sicher, wo man die Funktion für das highlighting (also debug_output) am besten unterbringt. Habt Ihr ne Idee?

Verfasst: Di 22. Mai 2007, 13:24
von HerrB
Bei den eval-Fehlern bei den Modulen kannst Du mit V4.6.15 die Zeilennummern einblenden. Für diesen Bereich gibt es auch immer mal wieder Ideen für Syntaxhighlighting - die letzte gucke ich mir die Tage mal an.
Übrigens wäre es auch toll, wenn man den Debugmodus direkt im Adminbereich (ggf. über eine Systemvariable (Administration >> System >> Systemeinstellungen) an und ausschalten könnte
Yep. Ist auf der Wunschliste. Und auch, dass man das so aktivieren kann, dass man noch einen Parameter an die URL setzen kann, damit erst die Ausgabe erfolgt (damit nicht jeder Nutzer auf allen Seiten den Code sieht...).

Das andere gucke ich mir mal an, schöne Idee.

Gruß
HerrB

Verfasst: Mo 7. Jul 2008, 09:14
von rethus
Ich hab mal wieder einen zu checkenden Error.
Nutze derzeit die Version 4.8.6.

Ist das dort nun schon mit drinn, und wie aktiviere ich das debugging?

Re: Besserer Debug-Modus (Frontend-Debugging) inkl. Vorschla

Verfasst: Do 24. Nov 2011, 12:08
von rethus
Hat sich hier schon was im CoreCode meinen Anregungen entsprechend verändert?

Re: Besserer Debug-Modus (Frontend-Debugging) inkl. Vorschla

Verfasst: Mo 19. Okt 2015, 16:58
von rethus
Möchte das nochmal aus gegebenen Anlass erneut ins Gespräch bringen.

Re: Besserer Debug-Modus (Frontend-Debugging) inkl. Vorschla

Verfasst: Di 20. Okt 2015, 07:42
von marcus.gnass_4fb
+1
Ich finde den Vorschlag sehr sinnvoll! Ggf. kann man das ganze noch ein wenig aufhübschen mit einem Button nach dessen Klick sich ein Layer öffnet in dem man den Code in der von dir vorgeschlagenen Form sehen kann. @Freddy: machst du ein Ticket daraus?