PHP Fatal error: Exception thrown without a stack frame in Unknown on line 0

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
cuga
Člen | 210
+
0
-

Po hozeni na ostry server mi dost casto vicemene nahodile do logu zapisuje tahle hlaska. Nic nepada, vsechno vypada, ze jede jak ma. Mate nekdo tuseni jak se toho zbavit?

Honza Kuchař
Člen | 1662
+
0
-

Evidentně je to chyba PHPka. Něspíš něco podobného mi dělal xDebug. (když jsem ladil Multiple File Uploader)

LM
Člen | 206
+
0
-

Zkontroluj si jestli někde neukládáš nějakej neserializovatelnej objekt (třeba Nette\Component, DibiConnection …) do $_SESSION nebo nevyhazuješ vyjímku v destruktoru.

cuga
Člen | 210
+
0
-

je mozne ze dibi ukladam do session, mrknu na to, diky.

pekelnik
Člen | 462
+
0
-

také jsem se s tím setkal… (tahle chyba se mi občas zobrazovala v šabloně) – bohužel jsem na to nepřišel… po upgradu na 5.3 se mi tato chyba přestala objevovat

Jan Tvrdík
Nette guru | 2595
+
0
-

Obvykle to znamená, že došlo k chybě po skončení běhu skriptu, např. ve funkci registrované pomocí register_shutdown_function.

knyttl
Člen | 196
+
0
-

Ahoj,

řeším stejný problém. Na konci výsledného kódu nacházím přesně tuto hlášku. Očividně ji způsobuje:

<?php Debug::enable( Debug::DEVELOPMENT ); ?>

Nevím, jak to ale eliminovat, pokud dále chci Debug používat. Nejhorší je, že je vygenerována víceméně náhodně.

Díky.

Aurielle
Člen | 1281
+
0
-

Verze PHP? Mě něco podobného dělalo PHP 5.3.0, po upgradu chybka zmizla.

nanuqcz
Člen | 822
+
0
-

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)

knyttl
Člen | 196
+
0
-

Musí to být nějaká chyba v třídě Debug. Už když někdy během routeru ukončím činnost pomocí exit(), tak na konci se zmíněná hláška stejně objeví.

Výsledek je také ten, že se neobjeví debugbar.

Ondřej Mirtes
Člen | 1536
+
0
-

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 | 8144
+
0
-

Můžete zjistit, ve které revizi se to objevilo? Půjde zřejmě o nějaký commit z 2010–07–23

nanuqcz
Člen | 822
+
0
-

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 | 8144
+
0
-

Ono to způsobuje zřejmě generování Debug Baru, otázka je, která část přesně.

Patrik Votoček
Člen | 2221
+
0
-

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
+
0
-

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.

Patrik Votoček
Člen | 2221
+
0
-

ano myslím přesně ty… hmm a už ti to nedělá? můžeš to otestovat?

nanuqcz
Člen | 822
+
0
-

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:

  1. DebugPanel k zobrazování informací o routách používá RoutingDebugger.php
  2. RoutingDebugger.php volá metodu $router->match()
88. $request = $router->match($this->httpRequest);
  1. 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 | 499
+
0
-

dělá mi to také při aktuální verzi Nette2.0 stačí vyhodit vyjímku v homepagepresenteru v renderdefault

<?php
abstract class HomepagePresenter extends BasePresenter
{

    public function renderDefault()
    {
        throw new \Exception("test");

?>
David Grudl
Nette Core | 8144
+
0
-

Pošli mi prosímtě kód, který to dělá.

mcmatak
Člen | 499
+
0
-

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 | 8144
+
0
-

Samostatně jede, viz https://files.nette.org/NDebug.zip. Není možné, že chyby vyhazuje nějaký Debug panel?

Ondřej Mirtes
Člen | 1536
+
0
-

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
+
0
-

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 | 499
+
0
-

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 | 499
+
0
-

tak shutdown_function asi registruje uz debug ne?

takže to asi moc ladit nepujde?

<?php

Fatal error: Cannot redeclare register_shutdown_function() in X:\xampp\xampp\htdocs\solis\testing\app\bootstrap.php on line 220

?>
v6ak
Člen | 206
+
0
-

A máš i runkit_function_rename?

mcmatak
Člen | 499
+
0
-

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?

mcmatak
Člen | 499
+
0
-

takže dělá to dibi

<?php
@set_magic_quotes_runtime(FALSE); // intentionally @

  array(3) {
    ["file"]=>
    string(58) "X:\xampp\xampp\htdocs\solis\testing\libs\dibi\1.3\dibi.php"
    ["line"]=>
    int(28)
    ["function"]=>
    string(24) "set_magic_quotes_runtime"
  }


?>
mcmatak
Člen | 499
+
0
-

sorry opět mrtvý bod, takže stále nevím jak tohle řešit ani v čem je problém

iguana007
Člen | 970
+
0
-

já měl dnes podobný problém, laděnka hlásila chybu v dibi a ve finále jsem se dopátral chyby v template :P

jasir
Člen | 746
+
0
-

Zkus obalit v bootstrapu $application->run() do try{...} catch (\Exception $e) {print_r($e)}

v6ak
Člen | 206
+
0
-

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
+
0
-

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
+
0
-

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)

mkoubik
Člen | 728
+
0
-

Mě to samé dělal Doctrine2Panel, pokud jsem nezaregistroval entity manager jako service. Prozkoumej co by ten translator panel mohl vyhazovat za výjimku.