PHP Fatal error: Exception thrown without a stack frame in Unknown on line 0
- Honza Kuchař
- Člen | 1662
Evidentně je to chyba PHPka. Něspíš něco podobného mi dělal xDebug. (když jsem ladil Multiple File Uploader)
- Jan Tvrdík
- Nette guru | 2595
Obvykle to znamená, že došlo k chybě po skončení běhu skriptu, např.
ve funkci registrované pomocí register_shutdown_function
.
- nanuqcz
- Člen | 822
U mě se to taky právě objevilo… nejlepší na tom je, že používám přenosný XAMPP (nejnovější verzi – PHP 5.3.1) na flashce. Když jsem byl na normal PC, tak v pohodě. Když jsem ten samý projekt spustil z té samé flashky (stejný server, stejná verze PHP atd.) na notebooku, objevila se tahle chyba.
Po zakomentování
Debug::enable();
se objevovat přestala, po odkomentování se zase objevila. Zkoušel jsem restart serveru ale nepomohlo…
EDIT: tak možná se to objevovalo i na normálním PC. Všiml jsem si totiž, že tuhle chybu mi to hází jen pro HomepagePresenter ze skeletonu, další presentery co jsem si vytvořil já jedou v pořádku.
Editoval xxxObiWan (20. 7. 2010 22:40)
- Ondřej Mirtes
- Člen | 1536
Potvrzuji, po updatu na nejnovější Nette mi tohle dělá aplikace se zapnutou Laděnkou, když Laděnku vypnu, všechno běhá jak po másle.
Nejčastěji to mám při AJAXovém requestu v payloadu a fakt hodně špatně se to debuguje.
Pomůže, když v Debug.php zakomentuji všechny volání exit
,
ale to asi není ta správná cesta :)
- David Grudl
- Nette Core | 8228
Můžete zjistit, ve které revizi se to objevilo? Půjde zřejmě o nějaký commit z 2010–07–23
- nanuqcz
- Člen | 822
V Nette, které mám stáhnuté já, mám napsané:
Nette Framework 1.0-dev (revision 1ac0863 released on 2010-07-01)
Později zkusím stáhnout nejnovější verzi jestli to už náhodou není opravené, až bude čas :-)
Ale bude to asi někde v routerech, tahle chyba se mi ukáže pokaždé, když je aktivní některý z ONE_WAY routerů (proto se mi to ve skeletonu ukáže u DefaultPresenteru), nebo jakýkoliv SimpleRouter.
- David Grudl
- Nette Core | 8228
Ono to způsobuje zřejmě generování Debug Baru, otázka je, která část přesně.
- Patrik Votoček
- Člen | 2221
mám takové tušení že to nedělá žádná interní část nette nýbrž některý z přidaných panelů
- nanuqcz
- Člen | 822
mám takové tušení že to nedělá žádná interní část nette nýbrž některý z přidaných panelů
Tím myslíš některé rozšíření Debug baru z doplňků ? Teď tam sice dvě rozšíření mám (TodoPanel a TimerPanel), ale v době kdy jsem na tuhle chybu poprvé narazil, jsem měl čisté Nette bez čehokoliv navíc.
- nanuqcz
- Člen | 822
hmm a už ti to nedělá?
Už mi to nedělá, protože jsem prozatím přestal používat ONE_WAY routy a SimpleRouter :-D Ale možná tuším kde je chyba, zkusím se v tom trochu pohrabat…
EDIT: Tak tady je na co jsem přišel:
- DebugPanel k zobrazování informací o routách používá RoutingDebugger.php
- RoutingDebugger.php volá metodu $router->match()
88. $request = $router->match($this->httpRequest);
- Pokud v Route.php zakomentuju řádek 212, funguje všechno jak má. Při odkomentování to zase začne házet PHP Fatal Error.
210. // 5) BUILD PresenterRequest
211. if (!isset($params[self::PRESENTER_KEY])) {
212. //throw new \InvalidStateException('Missing presenter in route definition.');
213. }
Takže metodě match se buď v kroku 2 předává špatný parametr, anebo
je chyba přímo v Route::match()
.
Na zbytek doufám přijdete vy, ode mě s mojima chabýma znalostma Nette zatím víc nečekejte :-D
Editoval xxxObiWan (7. 8. 2010 12:25)
- mcmatak
- Člen | 504
nasadil jsem laděnku z 2.0 do 0.9.5, ale fakt nevím jak to rozchodit, nedaří se, pořád to hází tuhle chybu
Fatal error: Exception thrown without a stack frame in Unknown on line 0
laděnka už je závislá plně na nette? samostatně už nejede?
jsem v takové slepé uličce, 0.9.5 debug panel tam není, jsem na něm závislí, hlavně translation panel, nette 2.0 ale stále nemá hotový changelog, navíc se tam pořád něco mění takže ostrý projekt převést na 2.0 není moc chytré,
kudy z toho ven?
- David Grudl
- Nette Core | 8228
Samostatně jede, viz https://files.nette.org/NDebug.zip. Není možné, že chyby vyhazuje nějaký Debug panel?
- Ondřej Mirtes
- Člen | 1536
Mně přijde, že se to děje, když nastane chyba v samotném callbacku registrovaném pomocí register_shutdown_function. Nette nám tuhle hlášku vyhazovalo v případě, že do callbacku Laděnky přišel nějaký error z Doctrine, který neměl informaci o číslu řádku, resp. říkal 0:
// vygooglený ilustrační příklad
Warning: class_parents(): Class User does not exist and could not be loaded in /Users/cirpo/Sites/test/mongodb-odm/lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadataFactory.php on line 0
- v6ak
- Člen | 206
Aha, takže by to šlo ladit asi takto:
runkit_function_rename('register_shutdown_function', 'v6ak_internal_register_shutdown_function');
function register_shutdown_function($func){
$args = func_get_args();
array_shift($args);
v6ak_internal_register_shutdown_function(function() use($args){
try{
call_user_func_array($func, $args);
}catch(Exception $e){
zpracování výjimky
}
});
}
- mcmatak
- Člen | 504
všechny debug panely jsem měl vypnuté, zkusím tam nacpat ten ndebug misto zkopirovani dir z nette 2.0
kazdopadne chyba nastala pouze pri vyhozeni exception v jakemkoli rendereru mohl by i prazdny, viz kod ktery jsem posilal vyse , dalse snad uz sem muzu dat jen bootstrap protoze nic vic tam neni
- mcmatak
- Člen | 504
ha! tak jsem se mírně pustil do laděnky a způsobuje problém toto
string(49) „Function set_magic_quotes_runtime() is deprecated“
jestli správně rozumím, samotná laděnka vyhazuje exception ve chvíli, kdy zpracovává exception? resp. kdy ukončuje skript
zajímavé je že funkce set_magic_quotes_runtime se v celém projektu nevyskytuje, rozumí problému někdo?
- v6ak
- Člen | 206
Pokud to dělá shutdown function (zaregistrovaná register_shutdown_function), pak toto asi nepomůže.
Ostatně, je to důvod, proč jsem vymýšlel https://forum.nette.org/…wn-on-line-0?… .
EDIT: A už i vím, proč to asi nefungovalo. Je potřeba ještě něco nastavit.
Editoval v6ak (14. 10. 2010 7:37)
- v6ak
- Člen | 206
Tak jsem to trošku poladil a pochopil, proč to píše tu chybu:
https://gist.github.com/625637
EDIT: Netestoval jsem to celé, nechtělo se mi instalovat runkit.
Editoval v6ak (14. 10. 2010 7:44)
- whipster
- Člen | 17
Mně to způsobuje DebugPanel NetteTranslator\Panel
když v bootstrapu zakomentuji chyba zmizí.
<?php
NetteTranslator\Panel::register();
?>
# PHP 5.3.3–7
# Apache/2.2.16 (Debian)
# Nette Framework 2.0-dev (revision 9f535f9 released on 2011–01–10)
Editoval whipster (8. 2. 2011 18:17)