Также известна как Белая страница смерти или Белый экран смерти . Это происходит, когда отчет об ошибках отключен, и произошла фатальная ошибка (часто синтаксическая ошибка).
Если вы включили протоколирование ошибок, вы найдете конкретное сообщение об ошибке в своем журнале ошибок. Обычно это будет в файле php_errors.log, либо в центральном месте (например, /var/log/apache2
во многих средах Linux), либо в самом каталоге самого скрипта (иногда используется в среде совместного размещения).
Иногда может быть более простым временно отображать ошибки. На белой странице отобразится сообщение об ошибке. Будьте осторожны, потому что эти ошибки видны всем, кто посещает веб-сайт.
Это легко сделать, добавив в начале скрипта следующий код PHP:
ini_set('display_errors', 1); error_reporting(~0);
Код включит отображение ошибок и установит отчетность на самый высокий уровень.
Поскольку во время выполнения ini_set()
он не влияет на синтаксические ошибки синтаксиса. Эти ошибки появятся в журнале. Если вы хотите также отобразить их на выходе (например, в браузере), вам необходимо установить директиву display_startup_errors
на true
. Сделайте это либо в php.ini
, либо в .htaccess
или любом другом методе, который влияет на конфигурацию перед временем выполнения .
Вы можете использовать те же методы для установки параметра log_errors и error_log , чтобы выбрать ваше собственное место в файле журнала.
Если вы посмотрите в журнале или используете дисплей, вы получите гораздо лучшее сообщение об ошибке и строка кода, где ваш скрипт останавливается.
Похожие вопросы:
Связанные ошибки:
Нет, не, пока Вы соединяете тот же объект. Рекурсивный код эффективно уже имеет блокировку и, продолжаются беспрепятственный - также.
lock(object) {...}
стенография для использования Монитор класс. Как Marc указывает , Monitor
позволяет повторная входимость , так повторенные попытки соединить объект , на котором текущий поток уже имеет блокировку , будет работать просто великолепно.
, Если Вы начинаете соединяться отличающийся объекты, именно тогда необходимо быть осторожными. Обратите особое внимание на:
при повреждении любого из этих правил Вы, как в значительной степени гарантируют, получите проблемы мертвой блокировки в какой-то момент .
Вот одна хорошая веб-страница, описывающая синхронизацию потока в.NET: http://dotnetdebug.net/2005/07/20/monitor-class-avoiding-deadlocks/
кроме того, соедините как можно меньше объектов за один раз. Рассмотрите применение крупномодульные блокировки , если это возможно. Идея, являющаяся, что, если можно записать код, таким образом, что существует граф объектов и можно получить, соединяет корень того графа объектов, затем сделайте так. Это означает, что Вы имеете, каждый соединяет тот корневой объект и поэтому не должен волноваться так о последовательности, в которой Вы получаете/выпускаете блокировки.
(Одно дальнейшее примечание, Ваш пример не является технически рекурсивным. Для него, чтобы быть рекурсивным, Bar()
должен был бы назвать себя, обычно как часть повторения.)
Ну, Monitor
позволяет повторную входимость, таким образом, Вы не можете завести в тупик себя... так нет: это не должно делать
Если поток будет уже содержать блокировку, то он не заблокирует себя..Net платформа гарантирует это. Только необходимо удостовериться, что два потока не делают попытку к aquire тех же двух блокировок из последовательности любыми путями выполнения кода.
тот же поток может aquire та же блокировка многократно, но необходимо удостовериться, что Вы выпускаете блокировку то же количество раз что Вы aquire это. Конечно, пока Вы используете ключевое слово "блокировки" для выполнения этого, это происходит автоматически.