Я иногда иногда нахожу строки формата немного похожими на регулярные выражения, в которых, когда я возвращаюсь к коду позже, я забыл нюансы. Поэтому я пошел со следующим, что с меньшей вероятностью отправит мне документацию:
string FormatTimeSpan(TimeSpan timeSpan) =>
$"{Math.Floor(timeSpan.TotalHours)}h {timeSpan.Minutes}m {timeSpan.Seconds}s";
Строковая интерполяция, введенная в C # 6, делает это намного яснее, чем в противном случае.
У меня была полная ошибка. Очень пространственный случай: если вы подключите крюк неназванной функции (замыкания) к точке крюка объекта объекта. После этого вы попытаетесь сериализовать этот объект.
У меня была такая же ошибка: появилась версия сервера с centos 5 до centos 6 и понижение PHP с 5.4 до 5.3. Фактической проблемой был PHP apc, не настроенный должным образом. Проверьте свою APC. Я использовал Symfony2, поэтому вы можете найти некоторую помощь в Symfony Невозможно выделить память для пула
Для нас эта ошибка произошла из-за непреднамеренного сериализации объектов SimpleXML.
Если вы используете объекты SimpleXML с 5.3.3, убедитесь, что вы забрасываете значения узлов во все, что вам нужно (например, string), если вы сериализуете значения в сеансе.
До:
$token = $response->Token->Value;
/* token saved in session, results in line 0 error */
После:
$token = (string) $response->Token->Value;
/* token saved in session, no error */
один простой способ произвести эту ошибку - старый сервер с register_globals = On
. то вам понадобятся только две строки кода:
<?php
$_SESSION["my_var"] = "string";
$my_var = new MyClass(); //could be any class, i guess
?>
, как только вы перезагрузите эту страницу один раз, вы получите ошибку Exception thrown without a stack frame in Unknown on line 0
. похоже, что существует конфликт между экземпляром класса и переменной (session). по крайней мере, так я получил эту досадную ошибку, которую так сложно отлаживать.
Я понимаю, что на этот вопрос уже был дан ответ, но я добавлю это, поскольку он может кому-то помочь:
Мне удалось (непреднамеренно) создать ошибки без фрейма стека из функции, которая использовала свои собственные обработчик ошибок, чтобы поддерживать управление выполнением при вызове потенциально «опасной» функции, например:
// Assume the function my_error_handler() has been defined to convert any
// PHP Errors, Warnings, or Notices into Exceptions.
function foo() {
// maintain control if danger() crashes outright:
set_error_handler('my_error_handler');
try {
// Do some stuff.
$r = danger();
} catch (Exception $e) {
$r = 'Bad Stuff, Man!';
}
restore error_handler();
return $r;
}
В конце выполнения программы произошел «непрослеживаемый сбой» если логика в «Do some stuff» возвращается из foo () напрямую, минуя вызов функции restore_error_handler (). То, что я убрал из опыта, следующее:
Это была сложная ошибка для изоляции - Я в основном сузил проблему до указанной выше функции, а затем смотрел на нее, пока мои глаза не кровоточили.
Итак, как бы я отследил это, зная, что я знаю сейчас? Поскольку я не знаю, как можно напрямую проверять «стек» обработчика ошибок PHP, я думаю, что имеет смысл использовать объект Singleton для инкапсуляции всех операций set / restore для обработчиков ошибок PHP. По крайней мере, тогда можно было бы проверить состояние Singleton перед выходом из программы в обычном режиме, и если обнаружены «оборванные» обработчики ошибок, чтобы генерировать разумное сообщение об ошибке / предупреждении до того, как PHP выйдет из игры.
Вместо того, чтобы обертывать код в блоке try / catch, что происходит, когда вы регистрируете обработчик исключений? Очевидно, что ваш блок try / catch не перехватывает исключение, что приводит к ошибкам, зарегистрированным в Apache. Регистрируя обработчик, вы можете быть уверены, что любое неперехваченное исключение обрабатывается.
Кроме того, если вы используете пространства имен в своем приложении, убедитесь, что вы записываете \ Exception в свой блок catch (или включаете класс Exception через инструкцию использования).
function my_exception_handler($e) { error_log(get_class($e)." thrown. Message: ". $e->getMessage(). " in " . $e->getFile() . " on line ". $e->getLine()); error_log('Exception trace stack: ' . print_r($e->getTrace(), 1)); } set_exception_handler('my_exception_handler');
Проверено, что оно действительно перехватывает исключения, и всего несколько минут назад появился другой! [Mon May 21 09:48:39 2012] [error] [client x.x.x.x] PHP Fatal error: Exception thrown without a stack frame in Unknown on line 0
Я тоже возлагал большие надежды на это.
– groovenectar
21 May 2012 в 14:54
Вероятно, у вас есть коррумпированная / несогласованная таблица в базе данных. Попробуйте сбросить базу данных. Если вы получите ошибку, это время. Исправьте эту таблицу и проблему.
Именно по этой причине работает чистая установка. Чистая установка просто чиста.
mysqlcheck должен работать, но если он не отображается и проблема все еще делает выше.
Это может быть немного поздно, но одна проблема, которую я обнаружил при перемещении сайта с локального на удаленный сервер. Я использовал Concrete5 cms, разработал мой сайт локально (Windows 8 в xampp), а затем загружен на удаленный сервер, на котором запущен Cent 0S
. Windows mysql по умолчанию нечувствителен к регистру и создает базу данных в нижнем регистре. После того, как это было загружено на удаленный сервер, я получил «Исключение, которое было выбрано без фрейма стека в Unknown в строке 0?»
Затем я исправил случай таблиц базы данных, и мой сайт снова начал работать.
Эта проблема возникла для меня, когда я сменил пространство имен на нескольких пакетах Symfony. Удаление файлов в каталоге кеша symfony устранило проблему.