[2009-06-20] Nette Debug Console a další novinky

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Grudl
Nette Core | 8227
+
0
-

Ve třídě Debug se objevilo pár novinek.

V „bluescreen“ bylo rozšířeno zabalování a rozbalování dumpovaných argumentů + několik dalších vizuálních vylepšení:

Především však se objevila Nette Debug Console, tedy vyskakovací okénko, do kterého lze dumpovat.

Debug::consoleDump($arr, 'Titulek');

Jde vlastně o alternativu pro fireBug konzoli, kde dumpování není přiliš přehledné.

Dumpování má podporu ve filtru CurlyBracketsFilter, lze buď vypsat konkrétní proměnnou {dump $var} nebo vypsat všechny lokální proměnné {dump} a usnadnit tak ladění šablon:

Patrik Votoček
Člen | 2221
+
0
-

Super hračička… Hned se bude pracovat lépe. Bude podpora pro dibi? Něco jako dibi::dumpLastQuery(); ?

Editoval vrtak-cz (21. 6. 2009 1:12)

PaBi3
Bronze Partner | 62
+
0
-

Vo verzií pre PHP 5.3 nefunguje {dump}, pretože triedy Debug a Environment sa volajú bez namespace Nette.

rokerkony
Člen | 122
+
0
-

nefunguje v opere (alespon me ve verzi 9.64)… bylo by to super jako prave zminovana alternativa k firebugu a konecne nejakej nastroj pro operu..

David Grudl
Nette Core | 8227
+
0
-

V Opeře 9.64 testováno. Musíš ale povolit vyskakovací okénka..

rokerkony
Člen | 122
+
0
-

ty povelené mám a okénko vyskočí ale je prázdné. přidávám screeny ‚stejného‘ okna v IE a opere…
IE
 Opera

nejaky napad? :-(

EDIT: sorry… :-) uz to bezi… ja je povolil jenom jako na kliknuti, pokud se povoli globalne tak uz to bezi :-)

Editoval rokerkony (21. 6. 2009 16:27)

jasir
Člen | 746
+
0
-

Nádhera, díky! Takový „malinký“ nápad – co místo té rozbalovací šipčičky na kterou se mi blbě trefuje :) udělat klikatelný název proměnné (a tu šipčičku dát třeba hned za název…
Ale je to prkotina…

David Grudl
Nette Core | 8227
+
0
-

Malinký nápad, ale byla to fuška ;) Je to tam.

jasir
Člen | 746
+
0
-

David Grudl napsal(a):

Malinký nápad, ale byla to fuška ;) Je to tam.

Moc děkuji, perfektní. :) Fuška na 1 řádek, tak se pozná Pan Programátor ;-).
Mám ještě jeden dotaz – když používám Debug::consoleDump() před fází render, vyhodí
to
<pre>
InvalidStateException
Cannot set HTTP code after HTTP headers have been sent (output started at C:\WORK\projects\adastra-nette\libs\Nette\Debug.templates\console.phtml:186).
</pre>

což „mírně“ zhoršuje použitelnost… Je Debug::dumpConsole() použitelné pouze od fáze render dále nebo dělám něco špatně nebo je to na fix? Díky …

David Grudl
Nette Core | 8227
+
0
-

Protože komunikace probíhá přes HTML, tak po vytvoření console skutečně už nelze odesílat hlavičky. Jediným řešením je před dumpConsole() uvést ob_start().

Inza
Člen | 330
+
0
-

David Grudl napsal(a):

Protože komunikace probíhá přes HTML, tak po vytvoření console skutečně už nelze odesílat hlavičky. Jediným řešením je před dumpConsole() uvést ob_start().

A nešlo by konzolu udělat lazy? Jako že když ji zavolám tak si tento fakt nette někam uloží a potom ji přidá až na konec výstupu? – a asi i do errorHandleru abych ji viděl i když se zastaví běh..

Bylo by to možné? nebo je v mé úvaze nějaký závažný bug?

Další alternativou je aby Debug::dump obalil výstup nějakou hezkou classou a napsat např. v JQuery hračku, která po načtení stránku projede a všechny debug výstupy v ní najde, požere a vyhodí do nového debug okýnka… – s tím, že by nette tuto hračku potom zapnulo jako prví JS na stránce…

Co vy na to? – Možná by se to ale asi hodilo spíš do extras, nevím je to takový nápad jak obejít to že po vytvoření konzole, už nepošlu hlavičky, což je celkem omezení…IMHO

David Grudl
Nette Core | 8227
+
0
-

Inza napsal(a):

A nešlo by konzolu udělat lazy? Jako že když ji zavolám tak si tento fakt nette někam uloží a potom ji přidá až na konec výstupu? – a asi i do errorHandleru abych ji viděl i když se zastaví běh..

Hele to není špatný nápad. Je to tam ;)

Další alternativou je aby Debug::dump obalil výstup nějakou hezkou classou a napsat např. v JQuery hračku, která po načtení stránku projede a všechny debug výstupy v ní najde, požere a vyhodí do nového debug okýnka… – s tím, že by nette tuto hračku potom zapnulo jako prví JS na stránce…

To taky není špatný nápad. Ale jQuery použít nelze (zbytečná závislost) a bez něj se mi to programovat nechce ;)

Inza
Člen | 330
+
0
-

Díky moc Davide! Mám ještě několik postřehů:

Hrozně rád používám jak Debug::dump tak i Debug::consoleDump v tomto kontextu:

$foo = Debug::dumpConsole(barMethod());

Ale mám s consoleDumpem problémek (jestli je stejný problémek i s normálním dumpem nevím, netestoval jsem) – ale občas mi to přetypuje vstup, nebo v případě, že vložím array s jedním prvkem, vrátí string a mě pak zkolabuje typová kontrola. Také občas neudrží třídu. Šlo by to nějak fixnout?

Další věc, že když chci dumpnout booleanovou proměnnou a ona je false, nic se nezobrazí. Když to dumpuju před normální dump tak je to ok.

A potom pár feature requestíků:

Když mám AJAXový požadavek tak mi ho tato konzola zhroutí, šlo by udělat, že by v případě detekce AJAXového požadavku by ta konzola byla tichá, popř, že by se zachovala jako normální Debug::dump?

A na závěr jeden takový dotaz, možná je zcela zcestný, ale stejně: Mám jako programátor hrozně rád co nejméně psát a moc se mi líbí že Debug::dump má 11 písmenek… ale Debug::consoleDump jich má 18, což je ksoro o 10 víc;-) – Tak mám takovou kacířskou myšlenku – od té doby co přibyla do Nette tato featurka (consoleDump), tak starší Debug::dump vůbec nepoužívám (tedy kromě AJAXu, ale o tom jsem mluvil výše) – a to z ěkolika důvodů – Debug::dump mi vždycky rohzodil layout stránky, potom se mi neustále zobrazoval pomocí CSS stylů stránky a tak a nebylo to ono. S consoleDumpem je to jiné, lepší a více nice;-) A tak mě napadlo zda nepoužít consoleDump jako výchozí chování pro normální dump – popřípadě, pokud chceme zachovat možnost toho notmálního dump, udělat statický booleanovský atribut třídy Debug, který by se jednou např. v bootstrapu) nastavil a laděnka by používala defaultně consoleDump jako dump…

A ještě jeden feature requestík: Jak moc těžké je udělat, aby se to okénko samo resizovalo podle obsahu? – Samozřejmě s nějakým maximem (a to by také mohlo býti nastavitelné formou statického atributu třídy Debug)…

Co si o tom myslíš? A i vy ostatní?

Potom má několik věcí k Profileru: Bylo by možné podobně jako je realizováno zde oddělování částí pomocí titulků realizovat podobnou věc i v profileru na countery? A také zda by tyto oblasti mohly bát zavíratelné – potom by totiž mohl být profiler úplně super killer, páč by ani nepřekážel a zároveň ukazoval tolik informací kolik je potřebných…

Honza Marek
Člen | 1664
+
0
-

Jednak se divim, že Inzo nerad píšeš. A druhak prohlašuju, že opravdickej programátor napíše první tři písmenka a zmáčkne ctrl + mezerník i kdyby měl „dum“ do konce chybělo už jen „p“.

Inza
Člen | 330
+
0
-

Honza M. napsal(a):

Jednak se divim, že Inzo nerad píšeš. A druhak prohlašuju, že opravdickej programátor napíše první tři písmenka a zmáčkne ctrl + mezerník i kdyby měl „dum“ do konce chybělo už jen „p“.

Ok, dostals mě:-) – píšu rád;-) – a CTRL + Mezerník taky používám a používám moc rád – ale stejně…

Jan Tvrdík
Nette guru | 2595
+
0
-

Feature request: Přidat podporu pro zavření okna s konzolí na klávesu Esc.

Editoval Jan Tvrdík (15. 7. 2009 10:07)

David Grudl
Nette Core | 8227
+
0
-

Inza napsal(a):

Ale mám s consoleDumpem problémek (jestli je stejný problémek i s normálním dumpem nevím, netestoval jsem) – ale občas mi to přetypuje vstup, nebo v případě, že vložím array s jedním prvkem, vrátí string a mě pak zkolabuje typová kontrola. Také občas neudrží třídu. Šlo by to nějak fixnout?

consoleDump vrací vždy NULL – klidně to změním na vstupní proměnnou, ale tvůj popis chování mi na to nesedí. Nemůže být problém jinde?

Další věc, že když chci dumpnout booleanovou proměnnou a ona je false, nic se nezobrazí. Když to dumpuju před normální dump tak je to ok.

Debug::consoleDump(FALSE) mi funguje…

A potom pár feature requestíků:

Když mám AJAXový požadavek tak mi ho tato konzola zhroutí, šlo by udělat, že by v případě detekce AJAXového požadavku by ta konzola byla tichá, popř, že by se zachovala jako normální Debug::dump?

V AJAXu to fungovat nebude, to je jasné, jen si nejsem docela jistý, jestli by bylo nahradit to za Debug::dump() rozumné. To spíš Debug::fireDump.

>

A na závěr jeden takový dotaz, možná je zcela zcestný, ale stejně: Mám jako programátor hrozně rád co nejméně psát a moc se mi líbí že Debug::dump má 11 písmenek… ale Debug::consoleDump jich má 18, což je ksoro o 10 víc;-)

Zkus

function d($var) { return Debug::consoleDump($var); }

A ještě jeden feature requestík: Jak moc těžké je udělat, aby se to okénko samo resizovalo podle obsahu? – Samozřejmě s nějakým maximem (a to by také mohlo býti nastavitelné formou statického atributu třídy Debug)…

Pro mě ano, nejsem JavaScriptový odborník ;) Takže když to někdo naprogramuje, proč ne.

David Grudl
Nette Core | 8227
+
0
-

Jan Tvrdík napsal(a):

Feature request: Přidat podporu pro zavření okna s konzolí na klávesu Esc.

Je to tam.

mancze
Člen | 58
+
0
-

Honza M. napsal(a):

Jednak se divim, že Inzo nerad píšeš. A druhak prohlašuju, že opravdickej programátor napíše první tři písmenka a zmáčkne ctrl + mezerník i kdyby měl „dum“ do konce chybělo už jen „p“.

No, a ještě pokročilejší mačkaj ctrl + mezerník i u právě vytvářených proměnných. Ta klávesová zkratka je jako droga!

Honza Marek
Člen | 1664
+
0
-

Copak proměnný, tam se ještě krotim. Ale u metod a funkcí to obvykle nezvládnu. Zvlášť u takových jako jsou createComponentNazevForm ;-)

Jod
Člen | 701
+
0
-

No a tí ostatní čo ich serú javovské IDE, si nabindujú makro na tri písmenká a stlačia tab :)))

PetrP
Člen | 587
+
0
-

David Grudl napsal(a):

Zkus

function d($var) { return Debug::consoleDump($var); }

Ja z lenosti preferuju ;]

function d($var)
{
  if (func_num_args() > 1) $var = func_get_args();
  Debug::dump($var);
}