2015-12-03 16 views

Odpowiedz

8

Zasadniczo jest to data + hash, co powoduje, że każdy z takich błędów jest unikalny.

Dla rozwoju środowiska można wyłączyć, jak @Jost zalecane.

Ale produkcji ten ma kluczowe znaczenie dla niech będzie włączona, więc jeśli niektóre z wtyczek lub TS bibliotekami się nie powiedzie, to nie złamie pełną moc i pokazać „Oops wystąpił błąd”, bez jakiejkolwiek informacji , ale wiadomość, widzisz teraz z kodem.

Prawdziwy użytkownik witryny może następnie zgłosić ten kod, a Ty możesz wyszukać ten kod w dzienniku błędów TYPO3, który domyślnie znajduje się pod typo3temp/logs/, chyba że skonfigurowałeś go inaczej.

Ta funkcja naprawdę ułatwia życie, aby wykryć błędy generowane przez użytkowników.

19

Należy wyłączyć procedurę obsługi wyjątków obiektu treści, która jest procedurą obsługi wyjątków w nowych wersjach. Jeśli element treści/plugin zgłasza wyjątek, nie usuwa już całej witryny, ale tylko siebie. Aby ją wyłączyć, ustawić

config.contentObjectExceptionHandler = 0 

Reference

Nie zapomnij ponownie włączyć obsługę wyjątków, kiedy idzie na żywo, aw systemie życia, szukać śladu wyjątku w logach. Zasadniczo co Viktor Livakivskyi mówi w drugiej odpowiedzi.

-1

Można otworzyć plik ./typo3/sysext/frontend/Classes/ContentObject/Exception/ProductionExceptionHandler.php

Szukaj ciąg Ups, wystąpił błąd!. Dodaj linię debugowania bezpośrednio po deklaracji funkcji.

/** 
* Handles exceptions thrown during rendering of content objects 
* The handler can decide whether to re-throw the exception or 
* return a nice error message for production context. 
* 
* @param \Exception $exception 
* @param AbstractContentObject $contentObject 
* @param array $contentObjectConfiguration 
* @return string 
* @throws \Exception 
*/ 
public function handle(\Exception $exception, AbstractContentObject $contentObject = null, $contentObjectConfiguration = array()) 
{ 
debug ($exception, 'handle $exception'); 

Następnie używa się rozszerzenia debugowania, np. fh_debug. To da ci takie wyjście. Pokazuje backtrace połączenia, które prowadzi do tego błędu. Śledzenia są wyświetlane w 2 formatach. Możesz dodać więcej linii debugowania na pozycjach przed miejscami z śladów, aby uzyskać więcej informacji o błędzie.

<table><tbody><tr><td>index.php</td><td>34</td><td>call_user_func</td></tr><tr><td>index.php</td><td>33</td><td>run</td></tr><tr><td>Application.php</td><td>78</td><td>handleRequest</td></tr><tr><td>Bootstrap.php</td><td>302</td><td>handleRequest</td></tr><tr><td>RequestHandler.php</td><td>232</td><td>INTincScript</td></tr><tr><td>TypoScriptFrontendController.php</td><td>3478</td><td>recursivelyReplaceIntPlaceholdersInContent</td></tr><tr><td>TypoScriptFrontendController.php</td><td>3512</td><td>INTincScript_process</td></tr><tr><td>TypoScriptFrontendController.php</td><td>3564</td><td>cObjGetSingle</td></tr><tr><td>ContentObjectRenderer.php</td><td>859</td><td>render</td></tr><tr><td>ContentObjectRenderer.php</td><td>943</td><td>render</td></tr><tr><td>ContentObjectArrayContentObject.php</td><td>41</td><td>cObjGet</td></tr><tr><td>ContentObjectRenderer.php</td><td>805</td><td>cObjGetSingle</td></tr><tr><td>ContentObjectRenderer.php</td><td>859</td><td>render</td></tr><tr><td>ContentObjectRenderer.php</td><td>953</td><td>handle</td></tr><tr><td>ProductionExceptionHandler.php</td><td>53</td><td>debug</td></tr></tbody></table><br><table><tbody><tr><th>Object TYPO3\CMS\Core\Error\Exception</th></tr><tr><td>message</td><td class="el">PHP Catchable Fatal Error: Argument 1 passed to TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::render() must be an instance of TYPO3\CMS\Frontend\ContentObject\AbstractContentObject, null given, called in /home/myuser/public_html/neu/typo3_src-7.6.10/typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php on line 1359 and defined in /home/myuser/public_html/neu/typo3_src-7.6.10/typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php line 927</td></tr> 
 
<tr><td>code</td><td class="el"><table><tbody><tr><th>Integer</th></tr><tr><td>1</td></tr></tbody></table></td></tr> 
 
<tr><td>file</td><td class="el">/home/myuser/public_html/neu/typo3_src-7.6.10/typo3/sysext/core/Classes/Error/ErrorHandler.php</td></tr> 
 
<tr><td>line</td><td class="el"><table><tbody><tr><th>Integer</th></tr><tr><td>111</td></tr></tbody></table></td></tr> 
 
</tbody></table> 
 

 
<h3>handle $exception</h3><hr>


Tekst, dodane później: W międzyczasie nie ma potrzeby dłużej edytować plik PHP ProductionExceptionHandler.php z TYPO3. Po prostu instalujesz i konfigurujesz rozszerzenie fh_debug, które teraz robi konieczny krok automatycznie.

+2

Nie ujawniaj informacji o debugowaniu w produktywnych środowiskach, a dla bogów nie rób bałaganu z kodem źródłowym. – j4k3

+0

@ j4k3: Twój komentarz nie ma żadnego sensu. Dane wyjściowe informacji debugowania są kontrolowane przez ustawienia debugowania narzędzia instalacyjnego. Nie wołaj już mojego bałaganu kodowego! –

+0

Po pierwsze nie. Po drugie, dlaczego nie. Po trzecie, co jest tak trudnego do zrozumienia, że ​​jest hojne z debugowaniem informacji? Tajemnice twojego kodu są czymś, czego zwykle nie chcesz, aby Twoi potencjalni napastnicy wiedzieli o tym. Po czwarte. Nie. Bałagan. Z. The. Rdzeń. – j4k3

Powiązane problemy